Protocol Versions + Upgrade Docs

This PR introduces protocol versioning into the Serf layer, along with the documentation about how we handle protocol compatibility and how upgrades are handled. 

* Updates Serf core to handle protocol versioning (delegate version) and to mask the memberlist protocol version with the delegate version.

* Introduces a `-protocol` flag to `serf agent`. By default (if not specified), this will be the latest version. You can specify the protocol number to speak that version. It will properly error if you give a number out of range. 

* Introduces a `-detailed` flag to `serf members` to show protocol information for each member. This isn't machine readable anymore but I think we'll add a `-machine-readable` flag in the future to do this.

* Docs for all of this.