Json encoder tweaks

Some tweaks to the json encoder to make it easier to test.

The good news: timezone stuff is handled much better
The bad news: we are going to have to require the `pytz` module

`timezone` objects aren't standard until python 3 it seems?