'Issue one query and return a L{Deferred} which fires with its response.
@param query: The query to issue.
@type query: L{dns.Query}
@param servers: The servers which might have an answer for this
query.
@type servers: L{list} of L{tuple} of L{str} and L{int}
@param timeout: A timeout on how long to wait for the response.
@type timeout: L{tuple} of L{int}
@param filter: A flag indicating whether to filter the results.  If
C{True}, the returned L{Deferred} will fire with a three-tuple of
lists of L{twisted.names.dns.RRHeader} (like the return value of
the I{lookup*} methods of L{IResolver}.  IF C{False}, the result
will be a L{Message} instance.
@type filter: L{bool}
@return: A L{Deferred} which fires with the response or a timeout
error.
@rtype: L{Deferred}'

def _query(self, query, servers, timeout, filter):

    r = self._resolverFactory(servers=servers, reactor=self._reactor)
    d = r.queryUDP([query], timeout)
    if filter:
        d.addCallback(r.filterAnswers)
    return d
