This also restores the old module structure of having separate
`peer_pool` and `rlpx` modules. This is made possible by the
new Nim package `package_visible_types` (please refer to its
README for an explanation).
Also introduces more error handling in the low-level RLPx routines.
All detected errors will result in immediate disconnection of the
corresponding peer, which may be detected in the protocols though
the `onPeerDisconnected` event handler.
* Make all handlers async
* Added a new `requestResponse` construct that allows you to wait
for the results of a particular request
* Introduced an optional `NetworkState` type for the protocol
* The semantics of `nextMsg` has changed. See the notes in the README