cloneFn = function(node) {
      var newNode = new lf.proc.SelectNode(node.predicate);
      newNodes.push(newNode);
      return newNode;
    }
Recursively pushes down a SelectNode until it can't be pushed any further
down.
@param {!lf.query.SelectContext} queryContext
@param {!lf.proc.SelectNode} node The node to be pushed down.
@param {!function(!lf.structs.TreeNode):boolean} shouldPushDownFn
    A function to be called for each child to determine whether the node
    should be pushed down one level.
@return {!lf.proc.LogicalQueryPlanNode} The new root node of the sub-tree
    that used to start at "node" or "node" itself if it could not be pushed
    further down.
@private