Language switcher: connect to prefs & clean up some code

It may be easiest to review each commit individually, since they're fairly distinct:

Second commit - new feature:
* Add "Set as Default" menu item to status bar language switcher -- adds a permanent file extension mapping to preferences, based on the current file's path-specific language override (if any) and its file extension.

First commit - cleanups:
* Make LanguageManager the official public API that is used to set per-file overrides, rather than proxying through Document objects - remove `Document.setLanguageOverride()`
* Clear path overrides when switching projects, so it's more obvious to users it's not something that gets persisted across sessions
* Simplify how JS Code Hints listen for language updates: remove dependency on `"currentDocumentLanguageChanged"` event; remove unneeded extra 'if' tests

Third commit:
* Improve "Set as Default" menu item -- gray it out when the current file has no path-specific override (i.e., when the current language already is the default for the current filetype)
* Extend DropdownButton / DropdownEventHandler to support disabled items.
* In the process, clean up dropdown keyboard navigation substantially -- fixing #8433.

~~For clarity, I'd ideally like the "Set as Default" menu item to be grayed out when there is no path-specific override on the current file (i.e., when the current language already _is_ the default for the current filetype)... but disabled items aren't a think in DropdownButton yet and I will need to do some cleanup there to get it working -- so I wanted to post this initial for review first.~~ _(this is now implemented)_
The `"languageChanged"` event was added much earlier than the 0.42 language switcher PR -- it dates back to Sprint 21 (c00bfb1e), so I'd rather not change it as part of this diff.

There are some events documented for Document (see docs on the constructor at the top of Document.js), but not this one.  I'll add it.