Make WebSocketHandler generic with message type

Change WebSocketHandler to include a generic type of the message that
it can handle. For example WebSocketHandler<TextMessage> replaces
TextMessageHandler and WebSocketHandler<BinaryMessage> replaced
BinaryMessageHandler. In addition WebSocketHandler<WebSocketMessage>
can be used if both binary and text messages are supported.

The primary driver for this change is to make the WebSocketHandler
easier to understand at first glance. By having the handleMessage(T)
method as part of the interface, users no longer need to open
subclasses.
Javadocs and general formatting polish