Updates handshake protocol to send response and expect confirmation

The server-client handshake is currently unilateral, and does not require the client to complete any transaction. This means that the server cannot guarantee that the client has the unhindered ability to send messages, subject to message middleware. The server half of this change has already been merged.

This change also introduces a new event, "connection:ready", which will be used to confirm that messaging can begin (subscriptions are established and queued messages have been processed). In implementation, this will take the place of "connection:open" - this event now only signifies that the handshake has completed.