This is a refactored version of @sarensw's lexicographical comparison implementation (credit to @sarensw for the implementation).
What has changed:
Check criteria logic has been extracted into a separate method and GenericArgsSatisfy simplified
If any operand evaluated to null, the original implementation would throw an exception due to null check happening before the Apply operation. (This caused the GreaterThanLessThanWithMissingVar tests to fail)
This is a refactored version of @sarensw's lexicographical comparison implementation (credit to @sarensw for the implementation).
What has changed: