notaries is a list not a dictionary
Merge pull request #778 from yagoulas/get_notaries_bugfix

notaries is a list not a dictionary
Do not try to encrypt unless the public key of the recipient is present

* Let encrypt throw exceptions and handle them in its caller

* Add a docstring about the exceptions that can be thrown
Merge pull request #779 from yagoulas/encrypt_fixup

Do not try to encrypt unless the public key of the recipient is present
Refactor network_util.

* Add leak-safe check_port. Replace special-purpose code.
  * Prefer ipv6 over ipv4 sockets.
  * Accept variable timeout.
* Use tornado.netutil to check for valid IPs.
* Abstract protocol in get_peer_url.
* Prefer importing modules than names.
* Purge exec flag from file.
* Other style fixes.
Refactor code in connection.py.

* Drop unused peer_alive attribute.
* Replace bare except clause.
* Drop unused PeerConnection.responses_received.
* Refactor PeerConnection.create_zmq_socket.
  * Allow it to raise an exception; we are catching it elsewhere.
  * Make it a private function.
* Refactor PeerConnection.send_raw.
  * Make failure cases stand out.
  * Do not compress until ready to send.
* Make failure cases stand out in CryptoPeerConnection.start_handshake.
* Rewrite CryptoPeerConnection.check_port to use network_util.
* Shorten CryptoPeerConnection.sign.
* Straighten CryptoPeerConnection.encrypt.
* Refactor CryptoPeerConnection.send.
  * Make failure cases stand out.
  * Guard against encrypt returning False.
* Remove PeerListener.cleanup_context. PeerListener no longer manages
  it own zmq.Context. Purge any references.
* Drop PeerListener.stop.
  * Do not destroy global context arbitrarily.
* Straighten PeerListener.listen.
* Remove unused import.
Use network_util utilities in DHT.

* Remove comment referring cleanup_context.
Turn TransportLayer.shutdown into abstract method.