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 don't understand this. Could this method return something like `pytz.UTC`?

I think that would make it possible to compare `UTCDateTime` instances with timezone-aware `datetime.datetime` instances, but not non-tz-aware ones. This seems desirable.
```py
>>> from corehq.ext.datetime import UTCDateTime
>>>
>>> from datetime import datetime
>>> import pytz
>>> dt = datetime.now()
>>> dz = dt.replace(tzinfo=pytz.UTC)
>>> dx = UTCDateTime.now()
>>> dt
datetime.datetime(2014, 10, 15, 18, 4, 38, 672798)
>>> dz
datetime.datetime(2014, 10, 15, 18, 4, 38, 672798, tzinfo=<UTC>)
>>> dx
UTCDateTime(2014, 10, 15, 18, 4, 50, 99917, original_offset=None)

# expected
>>> dt < dz
Traceback (most recent call last):
  File "<console>", line 1, in <module>
TypeError: can't compare offset-naive and offset-aware datetimes

# unexpected: tz-naive datetime should not compare with UTCDateTime
>>> dt < dx
True

# unexpected: datetime with tzinfo should compare with UTCDateTime
>>> dz < dx
Traceback (most recent call last):
  File "<console>", line 1, in <module>
TypeError: can't compare offset-naive and offset-aware datetimes
```