Pattern vs Value abstraction

The class used to overload lifting operations. To reduce code
duplication, we overload the wrapped constructors (and everything
else, but that's irrelevant) to work in patterns, expressions, and
types.