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.
Fix doc block.
Merge pull request #3383 from markstory/strict-subcommands

3.0 - Strict subcommands