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.
closing peer-connection and tcp can never fail; so we comment that this onceClosed also always fulfills. Bonus: then we don't have to deal with failure's we don't know what to do with. That makes less error handling code, but is worth a comment. Ideally we'd have smarter typesystem to say that this is a fulfill only promise.