Parameterised monad interface, and a parameterised state monad.
Make IO.t covariant.
Move parameterised_monads.ml from async/ to cohttp/.
Eta reduce.
Add an interface definition for body.ml.
Dedicated module for IO signature.
Remove make.ml.
Move the signature for each functor to the corresponding mli file.
Turn the body-chunking option type into a GADT for stronger guarantees.

The types ensure that the chunking always returns a sequence of chunks
followed by an end marker.
Push the chunk-typing GADT through the code.
Replace GADT with a record of handlers.
Add a "then" operator to the monad interface.
Use carefully-typed states/transitions.

Also simplify the body reading protocol, removing the end message.
Call your end action when Body.read returns instead.
Remove unused types.