public void processPredicate(Predicate predicate, PredicateOptions options) {
        if (predicate instanceof PredicateOperator) {
            for (Predicate p : ((PredicateOperator) predicate).getOperands()) {
                processPredicate(p, options);
            }
        } else if (predicate instanceof FeatureRange) {
            processFeatureRange((FeatureRange) predicate, options);
        }
    }
Partitions all the feature ranges according to the arity and bounds
set in the PredicateOptions, and updates the ranges with a set of
partitions and edge partitions.
This is required to be able to store a range in the PredicateIndex.

@author Magnar Nedland
@author bjorncs
predicate-search-core/src/main/java/com/yahoo/search/predicate/optimization/ComplexNodeTransformer.java