An initial take at moving nginx's DNS resolution into the gatekeeper.

This is to workaround two main issues:

1. nginx only resolves upstream domain names once at startup and then
   caches that indefinitely. This can lead to broken backends if a
   backend's domain IP changes while running.
2. nginx will refuse to start if a domain name cannot be resolved (even
   if it previously resolved when added).

So this basic approach is to integrate DNS lookups into the gatekeeper
configuration reloader. We then only write IP addresses to the nginx
config file, falling back to 0.0.0.0 if it can't be resolved to solve
 #2. We then keep refreshing the domain's IP addresses from DNS based on
the TTL and then write nginx config files and reload nginx as necessary.
Remove debug logs from tests. Add comments to nginx config file.
Improve DNS resolver. Use system DNS servers and persist the results.

We were already caching the results in memory, but persisting the results in
redis helps cut down on the need for nginx to reload when the gatekeeper gets
restarted.
Fix for resolving local hostnames like "localhost."
Use a different IP for null routes. 0.0.0.0 was looping back.
Improve DNS resolution fallbacks to not cache invalid results.
Maintain existingIp when local lookups are performed.
Merge pull request #1 from NREL/dns_resolver

Resolve all domains into IPs for routing