Add timezone option

The original way to change timezone per request works well under most circumstances. However, we sometimes need different calendar to be in different timezones without polluting default timezone environment. The introduction of timezone as an option gives us a more flexible solution to these problems.