Refactor methods to prepare for UDP support

* Add socket parameter to _recvall()
* Factor out _SOCKS5_address() to pack host and port according to protocol
* Factor out _SOCKS5_request() to send arbitrary command
* Factor out _proxy_addr() to handle proxy port defaults
Basic support for sending UDP packets with SOCKS5 proxies
Use file readers and writers for sockets; factor out SOCKS5 address reading
Implement receiving UDP packets via recvfrom()
Allow for flags parameters and fix sendto() and recvfrom() for TCP sockets
Support connect(), send() and recv() for UDP sockets

Returns EAGAIN if recv() filters a packet.
Update readme about UDP