Add Unix/POSIX IO modules for Cohttp, both buffered and unbuffered
Add Unix/POSIX IO modules for Cohttp, both buffered and unbuffered

The buffered IO module uses the built-in ocaml in_channel/out_channel.

The unbuffered IO module only buffers the HTTP headers, and allows
the file descriptor to be passed, with the body unread, to another
process. Unfortunately this means we must issue more syscalls than we
would like (because we don't know the header length and can't just
do a big read()). We attempt to mitigate this by reading up to 4
bytes at a time, since the end of header marker (\r\n\r\n) is 4 bytes
long.

It might be better to always use a custom buffered channel implementation
and then always transmit the (remaining buffer, file descr) to
helper processes.

Signed-off-by: David Scott <63c9eb0ea83039690fefa11afe17873ba8278a56@eu.citrix.com>

djs55/xenopsd-previous,cheng--zhang/xenopsd,thomassa/xenopsd,johnelse/xenopsd,euanh/xenopsd,djs55/xenopsd,euanh/xenopsd,koushikcgit/xenopsd,thomassa/xenopsd,djs55/xenopsd,simonjbeaumont/xenopsd,koushikcgit/xenopsd,djs55/xenopsd,simonjbeaumont/xenopsd,simonjbeaumont/xenopsd,johnelse/xenopsd,koushikcgit/xenopsd,euanh/xenopsd,thomassa/xenopsd,cheng--zhang/xenopsd,johnelse/xenopsd,djs55/xenopsd-previous,djs55/xenopsd-previous,cheng--zhang/xenopsd