Use one client for forwarding dns requests

Don't re-create a dns.Client each time we forward a request, have
a global UDP and TCP client ready.

Also enable single inflight for outstanding queries.
Use singleinflight for etcd queries too

This limits the amount of outstanding queries for the same key
to etcd.
Put singleinflght impl. in its own file