created response abstraction

this pretty much completes the fundamental API - it's a little more
complex than originally imagined, but seems useful without making any
assumptions (other than standard reason phrases)

NB:
* supplying the Content-Length header is the request handler's
  responsibility (obligatory for now, as we don't currently support
  chunked transfer encoding
* encoding remains unclear in various places

/cc @cdent