Add type system hooks for marshalling.

In order to properly handle date/datetime fields we'll need a way to
convert from request data into PHP objects. This feels like it fits best
with the existing Type classes.

Add an empty hook into Type so that subclasses can specialize it.
Add tests for DateTimeType marshalling.

Add the various cases for marshalling datetimes.
Add invalid value tests to DateTimeType::marshall()
Add marshall() to DateType.

Date type fields have 00:00:00 for the time as they are dates, not
datetimes.
There is no time type in the code base.

This was probably missed/forgotten about and doesn't need to exist
anymore as it will cause fatal errors.
Data providers do not need to be static.
Stub out schema in mocked tables.

This fixes fatal errors when accessing schema data.
Merge pull request #2931 from markstory/3.0-datetime-marshall

3.0 datetime marshall