Before this change the NAR contents would be buffered in memory before
supplying them to the client. Now each chunk is instantly flushed
to the client when it's available.
This requires reworking things so that we use a `StreamingBody`,
which in turn requires passing a Haskell callback to the C code to
invoke.