Adding support for DNS TTLs and stale reads

This PR adds support for setting DNS TTLs and enabling stale reads for DNS queries. TTLs can be used to enable upstream caching. Stale reads can be used to reduce latency and increase throughput. Together, they enable using the DNS system at a very high scale. Fixes #84.