Make the entity data optional.

Refs #2267
Start preparing FormHelper tests to be rebuilt.

I'm planning on tackling the FormHelper tests one method at a time.
Keeping the old tests skipped until all the cases have been accounted
for will help ensure new regressions are not introduced.
Add test stub methods.
Add skeleton methods for widget features.
Add missing errors and type checks in InputRegistry

Providing string classnames should work. If an object is provided it
should be checked for the correct interface.
Start integrating the context classes into FormHelper.

Add several new methods that allow the various context classes to be
used by FormHelper. This also removes some 2.x legacy code that will
inevitably break existing tests & code.

A few TODO's are in the commit as I didn't want to make it even more
enourmous.
Add tests for context detectors.

Move code around and add tests for the default context classes.
Very basic FormHelper::create() test is passing again.

FormHelper doesn't need to add ID's to every element it creates.
Removing id generation on form elements reduces the chances it will
create duplicate ID's requiring developer intervention.
Move create() tests closer to the other create() tests.
Add interface checks for context objects.
Clean up URL generation.

Instead of detecting the controller based on the model names, only use
the current request. If you'd like a form to always point at a specific
URL you will need to set the action/url options, this reducess the magic
and makes FormHelper simpler to understand.

This change also makes the put/post conventions simpler. Any time the
context is not in create mode, an update will be done.
Update doc block for FormHelper::create().
Get a few more create() tests passing.
Add hiddenblock to the default templates and use it.
Update code based on review comments.
Fix tests that broke when rebasing.
Fix coding standards errors.
Fix EntityContext operations on collections.

There were a few cases where EntityContext would hit a fatal error when
dealing with collections/arrays. This fixes that and also introduces
a minor optimization for array properties.
Remove code that was causing a failing test.

This kind of integration test is not going to work for a while and
provides dubious value even if it did work.
Merge pull request #2821 from cakephp/3.0-collection-context

Fix EntityContext operations on collections.