Added toggle-mode, various mode related wiring.

Most of the mode resolution stuff was revamped to be async, which will be
useful when package resolution is less sync-y. The DispatcherImpl was also
revamped to resolve its major mode via a name and args, which is more proper.

This opens the door to allowing major modes to change, which maybe I'll go
ahead and do, since I want to make it as easy as possible for modes to properly
clean up after themselves.

Currently toggle mode doesn't restrict itself to mini-modes, which is
unfortunate. I may change the @Mode annotation to @MajorMode and @MinorMode so
that I can make the distinction at package resolution time, which is basically
where it's needed. Any later and things become a PITA.
Use separate @Major and @Minor annotations.

This allows us to keep major and minor modes totally separate all the way from
soup to nuts. This allows us to only show minor modes in toggle-mode, and
(eventually) to only show major modes in whatever allows setting/switching
major mode.