[DNS recovery]: Implement and use a dns-resolver

This instruments the UDP ephemeral socket to use a DNS
    resolver and ask it for the IP of the host.

In this PR:

 - Tests for the statsd-client itself
 - Added Messages data structures for statsd
 - Created a DNS resolver that resolves a DNS host.
 - Updated the ephemeral socket to use DNS resolver.o


cc @Matt-Esch @mranney @jcorbin @kriskowal @sh1mmer
the ephemeral socket is something that knows about sending udp things. 

It'd be ideal to send it a string or buffer as that is a lean lowest common denominator interface.

I send the `message` as an "optional" second argument as implementing the requested hashing feature (not implemented yet) across a list of IPs would require hasing on the `name` field. 

I don't want to split the string on `":"` (arguably a micro optimization) so I change the interface to send both message string and the message object, I can't remember whether I changed this again to be `.send(message.toString(), message.name)` in a future PR but if not I will probably end up doing this.

Really I would want this interface to be `.send(buffer, key)` where buffer is the bytes to send down the socket and `key` is a key I can shard on in case I want to send it a client-side round robined list of UDP servers.