Fix ignored ids for belongsToMany relations

Fix ids ignored by marshaller for belongsToMany relations.
fix FileEngine, divergent behavior when debug is off or on
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.
Initial code for a BETWEEN SQL expression object
Fixing code and adding test for the Between expression
Fixing doc block
Adding doc block for QueryExpression::between()
Removing inheritance on the Comparison expression

The inheritance was not needed at all and only created confusion,
specially since the operator was hacked into _conjunction and
the getter/setter for it made no sense at all.
Consolidating common code
Using a new FieldInterface to make BetweenInterface quotable

By using and expression the identifier quoter can now handle
comparisons and between objects af if they were the same thing.
Also removed a piece of code was not actually needed.
Fixing CS errors
Merge pull request #4986 from cakephp/issue-4790

Implement less aggressive casting in ORM.
Fixing return values in QueryExpression doc blocks
Adding test for using an expresison field with between and fixing code
Fixed typo
Fix eg. code in docblock.
Merge pull request #4989 from cakephp/3.0-between-expression

3.0 between expression
Merge pull request #4768 from darxmac/cache-consistent-behavior

fix FileEngine, divergent behavior when debug is off or on