ReusableConstraint
ReusableConstraint wraps a constraint expression after
            resolving it so that it can be reused consistently.
            
                
Construct a ReusableConstraint from a constraint expression
            
Converts a constraint to a ReusableConstraint
            
Return the top-level constraint for this expression