Fix OPENDJ-986: Exception when reading messages from Replication server RS
* make protocol versioning the responsibility of the ProtocolSession object. Previously, it was split between various classes making it very confusing and risk-prone. Now only one class (TLSSocketSession) "owns" the protocol version
* removed ReplicationMsg.getBytes() and require that all message impls implement ReplicationMsg.getBytes(short protocolVersion). Messages which have never evolved since the first protocol version can simply ignore the passed in protocol version parameter
* simplified the handshake process, ensuring that we always set the protocol version once the handshake has completed. Part of this change was to remove the protocol version from the start message constructors, since it is implied during encoding (this removes some ambiguity in these classes)
* many other minor code clean ups and bug fixes.