Create batch versions of query environment methods getFwdDeps and getReverseDeps, and migrate DepsFunction and RdepsFunction to use them.

This makes our (unordered) results potentially dependent on the iteration order of hash sets, but what do we care?

--
MOS_MIGRATED_REVID=96117626
diff --git a/src/main/java/com/google/devtools/build/lib/query2/BlazeQueryEnvironment.java b/src/main/java/com/google/devtools/build/lib/query2/BlazeQueryEnvironment.java
index 79ff3a9..e7992f4 100644
--- a/src/main/java/com/google/devtools/build/lib/query2/BlazeQueryEnvironment.java
+++ b/src/main/java/com/google/devtools/build/lib/query2/BlazeQueryEnvironment.java
@@ -200,11 +200,29 @@
   }
 
   @Override
+  public Collection<Target> getFwdDeps(Iterable<Target> targets) {
+    Set<Target> result = new HashSet<>();
+    for (Target target : targets) {
+      result.addAll(getFwdDeps(target));
+    }
+    return result;
+  }
+
+  @Override
   public Collection<Target> getReverseDeps(Target target) {
     return getTargetsFromNodes(getNode(target).getPredecessors());
   }
 
   @Override
+  public Collection<Target> getReverseDeps(Iterable<Target> targets) {
+    Set<Target> result = new HashSet<>();
+    for (Target target : targets) {
+      result.addAll(getReverseDeps(target));
+    }
+    return result;
+  }
+
+  @Override
   public Set<Target> getTransitiveClosure(Set<Target> targetNodes) {
     for (Target node : targetNodes) {
       checkBuilt(node);