Allow alternate websocket implementations

I was trying to use the socket.io-client to test a socket.io server and I wanted to be able to tweak exact behavior on the underlying WebSocket implementation.  Because socket.io-client hardcoded exactly which WebSocket implementations were used, it was hard/impossible to achive what I was wanted.