Refactor type system, add custom types

Previously types were determined by the Mysql TypeMap and no conversion
was done on the way into the database or out of it. This change moves
that responsibility to the actual type objects and adds a new pair of
methods to Schema: marshal and unmarshal.

There have been some API changes in this revision:

- DomainObject::fromArray no longer takes a saved parameter and it
  assumes the array passed is to be set without any of the magic that
  occurs in load()
- Schema::hydrate() assumes a database row and will always unmarshal it