Implement streaming I/O for response data

Sending response to an HTTP request is now using streaming I/O.
ProtocolHandler::CompleteRequest() now returns a file descriptor
for the write-end of a pipe and clients (request handlers) can
write to this file descriptor data at a rate it becomes available.
When expected amount of data is sent (or the pipe is closed on
the handler's end) the response is finalized.

Both normal (when data size is known) and chunked responses are
supported.

BUG: 24166746
Change-Id: Ie98cfa4262ba82941aaefd4c9bfd9986c784219c
diff --git a/libwebserv/protocol_handler.h b/libwebserv/protocol_handler.h
index 91276d9..797c19a 100644
--- a/libwebserv/protocol_handler.h
+++ b/libwebserv/protocol_handler.h
@@ -167,7 +167,7 @@
       const std::string& request_id,
       int status_code,
       const std::multimap<std::string, std::string>& headers,
-      const std::vector<uint8_t>& data);
+      chromeos::StreamPtr data_stream);
 
   // Makes a call to the (remote) web server request handler over D-Bus to
   // obtain the file content of uploaded file (identified by |file_id|) during