Consolidated request handling logic into `Worker`

This takes the minor amount of request handling out of the `Host`
module and into the new `Worker` class (renamed from `Connection`).
This is to bring all the request handling logic together and
simplify the responsibilities of a `Host`. This also separates the
`Worker` from directly working with a protocol connection (or
socket). This allows the `Worker` to be more flexible for testing,
which makes the test suite less confusing and easier to maintain.
Finally, this includes some organizational cleanups and relaxes
the dependencies for the gem.