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.
Merge pull request #8 from pdf/fix_udp_merge_breakages

The UDP merge broke a lot of stuff