Types spike

***DO NOT MERGE INTO MASTER***

The purpose of opening a pull request is to solicit feedback on the API design from @solnic, @snusnu, @mbj and others. This should not be merged into master in it's current form.

Once the API has been discussed, I will develop the code using TDD and metrics driven development like other DataMapper 2 components.