Don't forcibly cast all data.

Casting everything to int/float has some advantages like always having
the correct types, but it also has drawbacks - makes validation hard.

This change takes a middle ground approach where data is cast if has the
correct approximate type. While these checks are far from perfect they
avoid casting totally invalid data.

Refs #4790
Tighten Date/DateTime/Time type tests.

All 3 types are less permissive with the accepted formats. This reduces
the chances that invalid input is cast into valid DateTime objects.

Refs #4790
Add integration test for Marshaller.

Add integration test for type casts. This isn't strictly necessary but
helpful incase we rebuild the type system in the future.
Merge pull request #4986 from cakephp/issue-4790

Implement less aggressive casting in ORM.