Remove dead code from transport.py

### Motivation 
After close inspecting, it turns out that large parts of code in `transport.py` are never really used. This includes the old handshake protocol and various other methods. 

### Changelog
Because it is hard to believe that all this code is unused I tried to clean it up following a thorough process:

1. I abstracted the methods of `TransportLayer` that were overridden by `CryptoTransportLayer` and nowhere invoked outside `TransportLayer`. All such methods were made to `raise NotImplementedError`.

1. I searched for and removed unused methods. This was done in multiple iterations, as each additional method removed revealed more unused code.

1. I removed unused code from other modules, namely `network_util.py` and `protocol.py`.

1. I removed all test code that was testing or mentioning dropped code.

1. I finished the cleanup doing some style fixes and other changes in `transport.py`.

This PR was co-authored by @Renelvon.
this makes you think... is `TransportLayer` necessary? why not just have a single Transport implementation class, and maybe make this `Transport` an abstract class.