3.0 - Add Shelldispatcher::alias()

As part of #3325, this add `ShellDispatcher::alias()` which can be used by plugins or application bootstrap code to define shorter aliases for plugin/app shells. Aliases are only checked *after* a matching shell could not be found.

I've also cleaned up the ShellDispatcher tests and removed the support for running shells that do not inherit from Shell. I think requiring inheritance from Shell is something we can do in 3.0.