Fix zone madness

This is supposed to fix most issues regarding manipulating `moment-timezone`-d moments across DST. Unfortunately the built-in Date still has the same issues.

* The main idea of the change is -- create low-level unit getters and setters that don't care about offset.
* Create higher level setter, that handles updating offset.
* Handle keep-time cases (changing the time across DST while wanting to preserve the hour/minutes), in which it is impossible (no such hour/minute in the current timezone)
* change updateOffset/zone api (zone's second arg wasn't working at all before, so I'm pretty confident no code is broken) 
* Setting the hour now keeps the time (that is we'll try to actually set the hour to the one you say :))
* startOf now works across DST

Corresponding `moment-timezone` PR will show up soon.