Introduce Handshake protocol and pass impl to :on-open

This breaks the signature of :on-open, as it now expects 2 arguments:
the channel and the handshake. We'll see if this can eventually obviate
the channel-based accessors for the handshake and session in the servlet
namespace.