Add per model ID mapping and modelDefaults
Allow models to define primary and secondary keys

Instead of simply defining a local and remote key, models can now define
any number of attributes with type `key`. One and only one primary key
must be defined per model.

See updated `Schema` comments for full details.