Enable support for SockJS WebSocket transport

Rework the NettyHandshakeHandler to instead be a
RequestUpgradeStrategy that can be injected into
DefaultHandshakeHandler. This allows it to be used for both plain
WebSocket and for WebSocket being used a SockJS's transport.

Upon completion of the handshake and the creation of the
WebSocketSession, notify the WebSocketHandler that the connection has
been established. Crucially in the SockJS WebSocket case, this
triggers the sending of the open frame.