Move logic in Date.timezone(num) to Timezone.get
Performance improvements

Querying for local timezone was extremely expensive,
since this cost should only ever be incurred once, we
are now storing the result after the first call in the
process dictionary.

In addition, I added some additional guards to prevent
unnecessary conversions or updates when not required.
Add timezone tests