Protocol versioning

This library offers a lightweight way for applications protocols to
version themselves. The more protocols that add themselves to
[Known_protocol], the nicer error messages we will get when connecting
to a service while using the wrong protocol.
