Implement a SOCKS client handshake
We'll need this for pluggable transport support, since pluggable transports use SOCKS to communicate.
The API is a little funky, but it's made to mirror the SOCKS proxy handshake API.
In order to make sure I got it right-(ish), I looked at the wikipedia article on SOCKS while I was implementing the code, and turned to the RFCs as I was writing tests. Finally, I included a round-trip test to make sure that the proxy and the client implementations can talk to one another successfully.
The fuzzer has run for a few hours and not found any crashes.