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
Resolves the ReusableConstraint by returning the constraint
that it originally wrapped.