Some type-related issues with hash joins

Mainly use `TClass.compare` in the absence of a `TKeyComparable`, since it will not be thrown off by differing size attributes and will use the proper collator between strings. Also clean up getting the collators used for hashing, to match the ones used for comparison. And clean up both collators and key comparables to keep them aligned with the comparison columns by capturing at the same place.

Also fix null handling.

This should fix at least some of the JDBC test failures, which were due to differing column widths in the joined type name `information_schema` columns. And the three FTS regressions.