Use self._fatal rather than assert.

This means the failure gets printed with useful contextual information.
Tidy up log format and propogate verbosity.
Actually skip a line when we intend to!
Timezone jump handling bug fixes.

- Fix bug in EqualByHour implementation which meant comparing a zero size jump
  with an expected jump of 3600 would return true.
- Rename EqualByHour to MatchWithFuzzByHour, clean up argument names and have
  it return the value that was matched. This improves accuracy when dealing
  with badly logged timezone lines.
- Call CalculateTime before dealing with timezone changes incase timezone
  changes occur while we're inside a kindle bogus time/date induced jump.
- Refactor timezone logging verbiage to increase clarity and re-order log
  messages in a few places to ensure they're logged with the fully correct
  time.
- Keep the old timezone in the state structure, in addition to the jump offset,
  to support the above logging clarity work.
Add repr method to state class.
Add multi-file processing option.

This can be useful for debugging interactions in state transfer between several
log files when you don't want to have to re-process your entire log directory.