Add WebSocketClient and WebSocketConnectionManager

This change adds a WebSocketClient abstraction and enables the use of
WebSocketHandler on the client side.