[Very WIP] Refactor CryptoPeerListener

### Motivation
Now that #839 is in, it's time to clean up `CryptoPeerListener`, document and test it.

### Changelog
* Will fill.

This isn't supposed to be working yet, I am still thinking how I should go about testing it. I 'd love to hear your ideas.