Actually, it probably makes more sense to add the cache in `OFDNSResolver`, as there is very little reason for any kind of DNS query to be repeated if the TTL hasn't expired yet.

This cache probably makes most sense to be per-instance, even though that means there is no reuse between threads. But the added locking on every lookup is probably worse than just doing one lookup per thread.