Flattened the request handling logic

This takes the minor amount of request handling out of the `Host`
module and into the new `Processor` (renamed from `Connection`).
This is to form all the request handling logic together, so we
can easily access the different pieces of handling a request.
This also simplifies the `Host`'s role, just taking and storing
user's configuration. I renamed the `Connection` class because
it didn't convey the intent of the class to me. The class is all
about processing a request and less about creating / working with
a connection.
Seperate connection rw from request processing

This seperates the reading and writing logic with the connection
from the request processing. The goal here is to allow the
processor to store "state" of it's handling of a request. This
saves passing around local variables from method to method or
alternatively creating one large method for the processing logic.
The extra benefit is this allows the processor to be unit tested
(instead of writing heavy system tests) because we can now pass
custom requests directly to it.