Allow custom handling of non-standard types in `time_zone_conversion`

PostgreSQL for example, allows infinity as a valid value for date time
columns. The PG type has explicit handling for that case. However, time
zone conversion will end up trampling that handling. Unfortunately, we
can't call super and then convert time zones.

However, if we get back nil from `.in_time_zone`, it's something we
didn't expect so we can let the superclass handle it.

Backport of 42418cfc94d1356d35d28d786f63e7fab9406ad6 and
65588b7463b227fd63f73b56b3df9d3ea5ab8996
Fixes #17971