Rework TZ parsing and marshal the Time zone

* Much less duplication for HHMM parsing.
* Stricter and clearer methods for getting a DateTimeZone.
* Fixes incorrect types for offset.
* Fixes #1837.