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.