Clean up date and timezone handling.
We used to pass changelog dates around as a "unixtime timezone" string
containing a pair of encoded ints. Now, they get passed around as a
(unixtime, timezone) tuple of numbers, which makes much more sense.
transaction abort!
rollback completed
abort: impossible time zone offset: 4444444
transaction abort!
rollback completed
abort: invalid date: '1\t15.1'
transaction abort!
rollback completed
abort: invalid date: 'foo bar'
transaction abort!
rollback completed
abort: invalid date: ' 1 4444'
transaction abort!
rollback completed
abort: date exceeds 32 bits: 111111111111