The UDP merge broke a lot of stuff

Part of this commit might be controversial because I've replaced the mocked
Sockets with actual sockets.  The reason is that mocking them out properly
would require quite a lot of work, and a comprehensive knowledge of what's
valid for the various socket types.

Assuming that is accepted, the UDP merge broke the `push_to_graphite` method. 
Also, because UDP is datagram-based, not connection-based, you can't just
submit multiple messages over a single connection - you either need to open
and close the socket for every message, or roll a sequence of messages up into
a single datagram, but then you run the risk of hitting size limits.  However,
for TCP we obviously want to keep the reduced overhead of multiple messages
over a single connection.

I've tried to account for all of these issues with this commit.