Implement strict subcommands.

Strict subcommands allow Tasks to be hidden from the CLI. It also allows
public methods on shell classes to be hidden from the CLI. Both are
beneficial when the developer does not want to expose every
public method/task as a CLI command.

Refs #3325
Refactor code.
Handle subcommands in fewer places.

Rework Shell::runCommand() so it doesn't require parameters to be
duplicated. This has the side benefit of making option parsing have
a simpler interface.

Update related tests, and code. CompletionShell had a silly parser
definition that I've corrected.

If a command's option parser fails, the error is now shown before the
help message. Hopefully this gives the end user some idea on what they
need to change when trying to call the shell.

This change continues to keep sketchy logic around for task's being
called through execute(). I'm going to address this in my next set of
changes.
Switch tasks from using execute() to using main().

This change unifies Tasks and Shells. It removes an un-necessary
convention that has little benefit but causes additional human mental
energy to remember. Removing it makes refactoring a shell into a task
easier.
Update bake for task subcommand changes.

Subcommands can now be nested when using tasks. This means we can drop
some gross code around method delegation in various bake tasks.

Clean up remaining tests for execute() -> main() changes as well.
Remove bin stub.

It is no longer part of the framework and issues warnings.
Add autoMethod parameter to runCommand()

This argument allows tasks to be shielded from the RAD feature that
allows shells to have any public method invoked. Tasks, will need to
have their subcommands explictly defined.
Updating the TimestapBehavior so it uses the new Time lib
Fix doc block.
Don't use a low port number for ServerShell.

Using port 80 requires sudo on many installations. Far too many
applications use 8080, or 8000 so use something different.
Merge pull request #3391 from markstory/server-shell-port

Don't use a low port number for ServerShell.
Merge pull request #3383 from markstory/strict-subcommands

3.0 - Strict subcommands
Fixing failing tests
Merge pull request #3389 from cakephp/3.0-timestamp-time-lib

Updating the TimestapBehavior so it uses the new Time lib
Don't use any groupTemplate or generic template for hidden fields

They should just be returned as-is based on their own input template.

Say you have a form template config like this (Twitter Bootstrap comatible):

$config = [
	'formGroup' => '{{label}}<div class="col-sm-10">{{input}}{{error}}</div>',
];

Then the hidden field would also include the div in the output, even though nothing
is visible.

This will screw up the visible form quite a bit, since the div will still consume the space
horizontally, but vertically be just 0 (1?) px high.

Additionally this PR includes the `error` in both groupTemplate and label template for even more
flexibility

This is the code needed to reach quite a lot of Bootstrap compat based on this PR

$config = [
	'fieldset' => '{{content}}',

	'formGroup' => '{{label}}<div class="col-sm-10">{{input}}{{error}}</div>',

	'groupContainer' => '<div class="input {{type}}{{required}} form-group">{{content}}</div>',
	'groupContainerError' => '<div class="input {{type}}{{required}} form-group has-error">{{content}}</div>',

	'input' => '<input type="{{type}}" name="{{name}}" {{attrs}}>',
	'error' => '<div class="help-block error-message">{{content}}</div>',

	'checkboxFormGroup' => '{{label}}<div class="col-sm-10">{{input}}</div>',
];
Add test for FormHelper::input() for hidden field.
Merge pull request #3351 from cakephp/dont-use-group-template-for-hidden-fields

Don't use any groupTemplate or generic template for hidden fields
Build out Cell baking.

Extend SimpleBakeTask to generate the class, test and template. I still
need to finish off the TestTask changes.
Clean up doc blocks and __toString() / render()

Code blocks need to render correctly in the API docs, and I prefer magic
methods to not do the bulk of the work.
Remove an unused method.

This method never gets called, so it can be removed.