IL verifier fixes for constrained invocations:

* When checking that the 'this' object on the stack matches the type we're constraining for the invocation, enums on the stack get reported as their underlying type (int, rather than System.Enum). So, use the underlying type of the constraining type as well so that the types match.
* Once that check has passed, the 'this' object is checked against the method's 'this' type; again this fails for enums because they're reported as underlying types. But if the type's constrained then it's safe for us to pretend that the enum type is actually the constrained type (System.Enum, etc), which passes the check against the method.