Begin Model support for typed_fields

This is the beginning of the `Model` class's support for the
`typed_fields` meta option. `Model._update()` will call its
`check_typed_fields()` function (multiple times if the update is atomic)
to check the types of fields. If a field is of the wrong type,
`TypeError` will be raised.

If the `$unset` operator is used in an atomic update, it will be
skipped. If the `$rename` operator is used, `UserWarning` will be
triggered and the event will be skipped. The `UserWarning` is triggered
rather than allowing the check to raise `TypeError` because the
`$rename` operation will not affect the value in the database, only the
name of the field will change. This is explained in detail in
`_update()`.

Support for typed lists is still outstanding. More tests should be added
for different types.

References #18