fix a collection of timezone bugs in standard functions

Our unittests on our project were failing because they're stricter than the emscripten unittests!

* localtime/mktime weren't inverses for every hour of the year; the one in October where they go back in tricksy
* gmtime/timegm similarly
* `tmp = localtime(x); strftime("%Z", tmp)` was printing GMT instead of the actual timezone
* Similarly strftime with `"%z"` was printing the host machine's current offset, not the timezone offset for the struct tm we're trying to print
* General other slips passing UTC times to functions accepting local times and vice versa.