More commits to http-streams.

Some other things I think should be done here:

  * OutputStream ByteString should be "OutputStream Builder" almost everywhere here. You're doing a lot of allocating of little bytestring pieces that using Builder would save you from.

  * as discussed before, move InputStream and OutputStream types into Request / Response, and have `receiveResponse :: Connection -> (Response -> InputStream ByteString -> IO a) -> IO a`. Unlike the current design, doing it this way would make it impossible to pipeline two HTTP requests and read them out of order.