Ensure ns_query_cancel() handles all recursions

Previously, multiple code paths reused client->query.fetch, so it was
enough for ns_query_cancel() to issue a single call to
dns_resolver_cancelfetch() with that fetch as an argument.  Now, since
each slot in the 'recursions' array can hold a reference to a separate
resolver fetch, ns_query_cancel() needs to handle all of them, so that
all recursion callbacks get a chance to clean up the associated
resources when a query is canceled.
65 jobs for !5884 with 3168-3-separate-all-recursions in 25 minutes and 26 seconds (queued for 6 minutes and 13 seconds)
merge request
Name Stage Failure
system:gcc:tumbleweed:amd64 System
No job log
system:clang:freebsd13:amd64 System
No job log
system:clang:freebsd12:amd64 System
No job log