implement similar lifecycle for socks sessions as for socks server

Similar ideas to:
https://github.com/uProxy/uproxy-networking/pull/137

A SOCKS session lives as long as its TCP connection and datachannel.
As discussed, I've added TODOs to make `doAuthHandshake_` and `receiveEndpointFromPeer_` public and add tests (kinda redundant since all almost untested functions should have unit tests...but it helps prioritise).