Add verification for websocket subprotocol on the client side.

This adds some verification functionality for the websocket subprotocol on the client side.
If the client requests to speak a subprotocol but the server replies none or a not-requested subprotocol it should be treated as an error. If we request no subprotocol  but the server replies one it's also an error.

I also added a getter for the WebSocketClientHandshaker in the WebSocketClientProtocolHandler, because you need to access it in order to extract the actual subprotocol but when you use one of the WebSocketClientProtocolHandler constructors which internally create a handshaker it is hidden from the user.
I think this can be slightly changed to be simpler. If I understood the code correctly you want `protocolValid` to be true if either `receivedSubprotocol` and `expectedSubprotocol` are both `null or empty` or if `receivedSubprotocol` matches  one of the comma separated protocols in `expectedSubprotocol`?
```
String receivedSubprotocol = response.headers().get(HttpHeaders.Names.SEC_WEBSOCKET_PROTOCOL);
receivedSubprotocol = receivedSubprotocol != null ? receivedSubprotocol.trim() : "";
expectedSubprotocol = expectedSubprotocol != null ? expectedSubprotocol : "";
boolean protocolValid = expectedSubprotocol.isEmpty() && receivedSubprotocol.isEmpty();
String[] protocols = expectedSubprotocol.split(",");
for (int i = 0; i < protocols.length && !protocolValid; i++) {
    protocolValid = protocols[i].trim().equals(receivedSubprotocol));
}
if (!protocolValid) {
    throw new WebSocketHandshakeException(String.format(
                     "Invalid subprotocol. Actual: %s. Expected one of: %s",
                     receivedSubprotocol, expectedSubprotocol));
}
setActualSubprotocol(receivedSubprotocol);
```