Removing more dead attributes from Shell. Making Shell::$name the name used to invoke the shell, not the classname. This makes it similar to other objects with names.
Shell::runCommand is now responsible for delegating out to tasks and correctly checking methods to run. ShellDispatcher no longer parses parameters and instead only pulls out the path information that it needs to setup the environment.
This allows task initialization to be moved out of ShellDispatcher where it does not belong, as tasks are similar to components. Updating parts of TaskCollection, as the Dispatcher is still required to be passed around.
Adding MissingShellMethodException, MissingShellClassException and MissingShellFileException for use with ShellDispatcher.
Removing duplicated tests, and refactoring them into separate tests with expected exceptions.