WebSocketStream cleanups

i) let user define the WebSocket instead of forcing it to be constructed as a private variable (but be back-compat)
2) factor recv() better
Bugfix: my last factorization erased an important step.
Revert "Bugfix: my last factorization erased an important step."

This reverts commit 6257e25e1345cd1ca6da017642350a455b907240.
Bugfix: my last factorization erased an important step.
Create the websocket in socks5.ws instead of in WebSocketStream.

This rearchitecture fixes the ugliness that was `this._ws._ws.onmessage =`