Protocol versioning

This PR enables protocol versioning. Here are the changes made summarized:

* Config now has new fields: `ProtocolVersion`, `DelegateProtocolVersion`, `DelegateProtocolMin`, `DelegateProtocolMax`. They're documented.

* `ProtocolVersionMin` and max constants tell us what our min/max we can _understand_ is.

* During a push/pull sync, both ends run `verifyProtocol` which checks all the versions for compatibility.

What is NOT done but needs to be done:

* Turn the O(n^2) verifyProtocol into O(n). Will be done soon.