Fetch, parse, and cache onion service descriptors on demand.
In order to connect to an onion service, a client must get a copy of its service descriptor. To fetch this, the client needs to determine a likely location on the hash ring (see #687 (closed)), then launch an anonymized circuit to that relay (see #688 (closed)), and make an anonymized BEGIN_DIR request to fetch the descriptor.
These descriptors should not be stored to disk, but they can safely be remembered.
We should probably make sure that these caches obey our circuit isolation/client isolation rules: we don't want to remember that we've cached a descriptor if we make another isolated connection to the onion service.
Edited by Nick Mathewson