Strategies for Asynchronous DNS
-------------------------------

Principles

1. As soon as we can tell what to query, initiate the query.

2. Design things so that the results of the query aren't needed
   until later in the process.

Three different strategies?

 A. Have the query_async() call return a token that can be used by
    a later function to get the actual result of the query.
	The "token" can actually be a subroutine that when called,
	produces the result of the query.

 B. Have the query_async() call not return anything, but the result
    will be cached so a later call can get the result of the query
    by passing in the same query parameters.

 C. Have the query_async() call take an extra parameter, a reference
    to a callback function... i.e. a function that will be called
    whenever the query finishes, with the result of the query.

I think I prefer strategy A to B; it's more standard of a practice.
One trick about A is knowing where to store the "token".
I'm not sure yet about A vs C.

C fits in more naturally with coroutines and continuations.
Might make the code more simple, but I need another function that
will block until the query is finished.
