Make TimeZone#parse behave more like Time#parse.

Namely, if the mday is omitted but any other upper components are, then instead
of supplying the mday from the current time, it defaults to 1.
Tidy up implementation of #15010