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.