Save timezone utc date time

Opening this for review as a solution to what was discussed at https://github.com/dimagi/commcare-hq/pull/4386#discussion_r18218758. (Notice I'm PRing into save-timezone.)

This solution introduces a new `datetime` sublcass, `UTCDateTime` that acts like a tz-naive datetime (what we use everywhere) but also keeps track of its "original offset". Compare to a tz-aware datetime:

The current time EST in as a timezone-aware `datetime`:
```python
datetime.datetime(2014, 10, 8, 15, 30, 20, 239874, pytz.FixedOffset(-4 * 60))
```
The same time as a `UTCDateTime`:
```python
UTCDateTime(2014, 10, 8, 19, 30, 20, 239874, original_offset='-04:00')
```

Notes that in the UTCDateTime example, the numbers for hours, minutes, etc. are the values for the UTC time, but the offset is preserved as `original_offset`, to mean "this UTC date was gathered from this timezone".

This lets us treat these objects exactly like we treat the timezone-naive `datetime`s we use everywhere to mean UTC, but without throwing away that information.

`UTCDateTimeProperty` then uses these new `UTCDateTime`s exclusively. It reads in any ISO 8601 datetime, but strictly writes out ISO 8601 unicode datetimes, with microseconds (and the 'Z' ending), followed by a space and the UTC offset string (e.g. '-04:00').

Todo:
- [x] This is obvious, but enable it to read in its own output format (which is not ISO 8601). (I just realized I hadn't done this.)
- [ ] If we like this, fix all the tests to include this utc offset string where necessary

You'll also notice I added a `corehq.ext.unittest` file that contains something I've wanted to be part of our testing library for a long time: a helper for creating "corpus tests" that just compare a bunch of pre-defined inputs and outputs to the real outputs of a function. You can see how these are used with the tests I just added.
I'm mixed on this. There's something nice about normalizing the input data.

What would you suggest we do about `'2014-10-08'`? It doesn't originally come with a time, but we arbitrarily assign one to it so that it is of the same form as the rest of the data; to me adding +00:00 is making explicit that we're treating no timezone given the same as +00:00 given and then all code that relies on there being an original_offset doesn't have to check for None. And then there's the question of what to do with to_datetime. Do we return a timezone unaware datetime in the case where there was no original timezone given? Etc.

I like that your suggestion preserves the most information, so I'm willing to be persuaded