DNS Lookup Caching

Fixes #29.
My other suggestion would be why we don't run a warmup request to resolve the DNS, then start boomer.

I think that's how we should implement this unless we don't provide precise stats about DNS lookup overhead.

>  map[string]*sync.RWMutex{}

Another mutex. Acquiring another a read lock is less blocking than write locks -- though as mdakin says they don't seem to be a blocker and are gone now :)