Require a reciprocal handshake message from the client

The current handshake implementation is incorrect, as it only requires a unilateral message. The server needs to guarantee the reliability and integrity of the client before adding to the connection pool.

This will also fix related bugs, where unauthenticated clients (those that would otherwise not be able to complete the handshake) are temporarily added to the connection pool until the heartbeat fails.