refactor mostly complete, now need to reconnect DHT logic

There are still plenty of concerns to separate, but Channels are now
properly bi-directional. Unfortunately, they are still too generic, but
this is where I anticipated needing to learn how to use fancy words
like polymorphism anyway.

The protocol-based channels also need a way to access DHT information,
but that's closely related to figuring out how best to subclass Channel
anyway.
a minor demonstration of the Channel genericicity problem