Introduce ProtocolHandler abstraction

Introduce a ProtocolHandler abstraction for encapsulating the logic
of a WebSocket sub-protocol. A WebSocketHandler,
MultiProtocolWebSocketHandler, that can delegate
to the appropriate ProtocolHandler based on the WebSocket session's
sub-protocol is provided. The Stomp support has been reworked to
be implemented as a ProtocolHandler rather than as a WebSocketHandler.

ProtocolHandlerResolver, an abstraction for resolving a
WebSocketSession's ProtocolHandler has also been introduced. This
reduces the responsibilities of MultiProtocolWebSocketHandler by
allowing it to delegate protocol handler resolution and also makes it
possible for Spring Integration to re-use the resolution logic.