Attributes types, model renaming, and tests. Oh my. ;)

I don't expect to merge this in. It was thrown together quickly because we needed support for these features.

But This is probably a good place to talk about these changes, and discuss which should be merged back in and how to do it.

This branch includes:

* specifying types on attributes and coercion to those types.
* maintaining a list of fields and slicing attributes to only include them.
* renaming of models so that the parse model name can differ from your model name.