[mono] Fix comparisons between non runtime types (#54062)
* [interp] Fix comparisons between non runtime types
We know that the result of object.GetType and ldftn + GetTypeFromHandle are runtime types and we track it on the compilation stack. If type equality operator is applied on two runtime types we use reference equality comparison, otherwise we use the managed implementation which uses Type.Equals.
* [mini] Fix comparisons between non runtime types
We know that the result of object.GetType and ldftn + GetTypeFromHandle are runtime types and we track it on the compilation stack. If type equality operator is applied on two runtime types we use reference equality comparison, otherwise we use the managed implementation which uses Type.Equals.
* [interp] Resolve GetType on constrained valuetype to the actual type