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