Fix timezone state to do more accurate check

These commits fix an issue on FreeBSD, which doesn't store a human-readable version of the timezone anywhere. This also makes the state more accurately reflect the contents of the timezone, whose underlying data may have changed since the last time it was set.