Listener refactor

### Motivation:
It turns out everyone uses `TransportLayer` as a dump for every method or attribute whose proper place is undetermined. As a result, this class is bloated with all sorts of code: managing sockets, listening for requests and handling various pieces of crypto code.

This is the first of a series of attempts to reduce the bloat of `TransportLayer` and factor the code into several smaller and simpler classes, more amenable to testing and maintenance.

The new `Listener` classes mirror the pattern of `PeerSender` and `CryptoPeerSender` but are designed cleanly and follow good practices such as defining all members in constructors. They are also completely independent from `dht.py` and `transport.py`, whereas `Sender` classes still have this problem and should be refactored in the future.

### Changelog:
* Factor classes `PeerListener` and `CryptoPeerListener` out of `TransportLayer` and `CryptoTransportLayer`, respectively.
* As the `Sender` classes get a `dict` that is then encrypted, compressed and sent, the listener classes do the inverse actions and receive, decompress and decrypt the messages, relaying the sent `dict`s to the receiver.
A function should not catch errors that are due to the caller. If I ask you to make marmelade out of cucumbers, raising a `TypeError` is the way to go; similar things should happen if I ask a socket to bind on a floating point. [pyzmq](https://github.com/zeromq/pyzmq/blob/master/zmq/backend/cython/socket.pyx#L429) does exactly that and we should respect it.

We should be more disciplined in our approach to Exceptions, especially on the development branch. Right now the code is littered with `except:` statements. These catch *all* kinds of errors, even the [SystemExit](https://docs.python.org/2.7/library/exceptions.html#exceptions.SystemExit) ones. That's one of the reasons our shutdown system is a bit broken.

I firmly propose that we gradually restrict ourselves to catching the expected exceptions only.