Unified body handling for async + lwt

* base body module
* backends extend the module by appending types of bodies to their own Body.t

There breakages are liberal here so here's a quick summary:

* Use the superior `{of,to}_t` naming convention instead of `x_of_y`
* Use ````Empty``` instead of option typing the body contents. See #64

The last 2 points are we can reject if the breakages don't justify the benefits.