code: function skipMany(previousExpr) {
  
        if( previousExpr == always ) {
           /* If there is no previous expression this consume command 
              is at the start of the jsonPath.
              Since JSONPath specifies what we'd like to find but not 
              necessarily everything leading down to it, when running
              out of JSONPath to check against we default to true */            
           return always;
        }
            
        var 
            // In JSONPath .. is equivalent to !.. so if .. reaches the root
            // the match has succeeded. Ie, we might write ..foo or !..foo
            // and both should match identically.
            terminalCaseWhenArrivingAtRoot = rootExpr(),
            terminalCaseWhenPreviousExpressionIsSatisfied = previousExpr,
            recursiveCase = skip1(function(ascent) {
               return cases(ascent);
            }),
  
            cases = lazyUnion(
                       terminalCaseWhenArrivingAtRoot
                    ,  terminalCaseWhenPreviousExpressionIsSatisfied
                    ,  recursiveCase  
                    );
        
        return cases;
     }
docs: Create an evaluator function for the .. (double dot) token. Consumes
  zero or more levels of the ascent, the fewest that are required to find
  a match when given to previousExpr.