Go nuts splitting out the field type stuff.
Introduce Field.expand(), Field.collapse(), ObjectIdField.
Add bool/binary/unicode types. Simplify load_dict().
Always use NumberLong.
Document null hate.
Support list vs [] correctly.
Bare minimum to get it working again.
Replace __getattr__ and __setattr__ with descriptors.

This generalizes __getattr__ and __setattr__ so that Field instances are
actually responsible for generating the mutations and expanding their
own value. That way ListField has all the context it needs to
instantiate a ChangeTrackingList, without hard-wiring anything.
Kill stupid print.
Various tweaks and bug fixes.

* Remove has_id(), it's equivalent to ``_id is None``. Document this.
* Remove custom _id() property, extend the new Field class with a
  readonly=True, and set it by default for _id.
Various fixed to get Narrato running again.
Various docs/code improvements/fixes.

* Tidy up Sphinx.
* Add mini-language examples to all Field classes.
* Remove UNDEFINED noise, since we hate None anyway.
* Tidy up the special case hack to avoid needlessly rebuilding
  dicts/lists.
* Avoid 3 list builds in def operations.
* Remove long_to_short() from get(), was wrong.
* Precalculate most of _dbcollection().