Improve Tuple's opCmp

Fixes:
* It is not actually legal to call a user defined type's opEqual when testing inequality
* Improves: Implementing opCmp in terms of "<" is very ineficient. So we call opCmp directly.
Tuple opCmp unittests

Verifies that opCmp is callable on non-matching tuple types, as well as verifies the result of the runtime call.