ConstraintBuilder
ConstraintBuilder maintains the stacks that are used in
            processing a ConstraintExpression. An OperatorStack
            is used to hold operators that are waiting for their
            operands to be reorganized. a ConstraintStack holds
            input constraints as well as the results of each
            operator applied.
            
                
ConstraintStack is a type-safe stack for holding Constraints
            
public ConstraintBuilder()
Initializes a new instance of the  ConstraintBuilder class.
            
Appends the specified operator to the expression by first
            reducing the operator stack and then pushing the new
            operator on the stack.
            
Appends the specified constraint to the expression by pushing
            it on the constraint stack.
            
Resolves this instance, returning a Constraint. If the Builder
            is not currently in a resolvable state, an exception is thrown.