Async: make ?body an explicit option since its an important part of the interface

via @yminsky
add a few tests for longer running connections that should help track down #11 and make sure it stays fixed
Attach a GC finaliser to the Lwt client to ensure that even an HTTP body isnt consumed, the socket will eventually be closed (closes #11).
tag 0.9.7
Remove `Cohttp_async.body` type alias and just use `string Pipe.Reader.t` for more explicit types.
simplify and remove redundant functions and signatures in Request/Response
[lwt] add explicitly module types for Cohttp_lwt and remove duplication in Cohttp_lwt_mirage and Cohttp_lwt_unix

This also removes Body as a module alias to Cohttp_lwt_body
fix tests for bf53b8c485bd87d74c5d787556206067915b0f03
[lwt] add in Unix-specific server functions in their own module
[tests] fix tests for interface changes
[lwt] remove cohttp_lwt_make and factor out tne Net module
[lwt] lift all the Unix server functions into the module type
[lwt] more module simplification within the Lwt interfaces across Mirage and UNIX
[lwt] Fold Cohttp_lwt_net into Cohttp_lwt.

This brings back the same consistent style of defining a IO submodule
rather than manually doing IO.ic and IO.oc equivalence assignment
[async] expose Async Request/Response modules.

These are extended versions of Cohttp.Request and Cohttp.Response,
with type equivalences so that functions from either modules can
be used interchangeably.

Closes #24
ocamldoc!
[lwt] simplify the Request/Response constructions

Instead of duplicating the Request+IO, add functors for those to
Cohttp_lwt, and use them throughout the Mirage/UNIX backends.
[lwt] tighten the module interfaces by simplifying the Server functors
[lwt] include Request/Response modules inside the Client/Servers
[lwt] cleanup to use Cohttp_lwt better in UNIX