Remove send_raw and cleanup_context

* Use PeerConnection.send when we need to send unencrypted
Clean up PeerConnection

* Untangle PeerConnection from transport.py
* Let create_zmq_socket throw exceptions and handle them in send
* Do not guard zmqstream calls from exceptions as these happen on
  programming errors
* Guard json.loads from exceptions that may be thrown while processing a
  message that came from the network
Remove _peer_alive
Rename create_zmq_socket to _create_zmq_socket
Clean up start_handshake

* Make start_handshake more readable
* Guard json.loads from exceptions that may be thrown while processing a
  message that came from the network
Remove sin and generate_sin from CryptoPeerConnection that were not used
Remove unused import
Use lazy logging,
Simplify updating peer nickname