'Create a L{GAIResolver}.
@param reactor: the reactor to schedule result-delivery on
@type reactor: L{IReactorThreads}
@param getThreadPool: a function to retrieve the thread pool to use for
scheduling name resolutions.  If not supplied, the use the given
C{reactor}\'s thread pool.
@type getThreadPool: 0-argument callable returning a
L{twisted.python.threadpool.ThreadPool}
@param getaddrinfo: a reference to the L{getaddrinfo} to use - mainly
parameterized for testing.
@type getaddrinfo: callable with the same signature as L{getaddrinfo}'

def __init__(self, reactor, getThreadPool=None, getaddrinfo=getaddrinfo):

    self._reactor = reactor
    self._getThreadPool = (reactor.getThreadPool if (getThreadPool is None) else getThreadPool)
    self._getaddrinfo = getaddrinfo
