Start refactoring state handling on `Peer`

So I've just came across a very interesting Haskell bittorrent library,
I hadn't seen before. I thought it was very interesting that we shared
a lot of design ideas; though that implementation is obviously complete,
whereas this is just a pile of code soup.

I'm studying `pipes` and `conduit` to try to find something that models
all of this a little better. The current task is to add logging to all
the currently implemented parts of this library, in a way that doesn't
clutter the code.

If we're able to do that, I think it'll be safe to say we managed to
arrive at a good architecture.