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 original Language Switcher pr went through and we didn't update the events in Document.js -- specifically the `LanguageChanged` event (which is a past-tense event name and we normally use current-tense event names) 

Actually it appears that there are NO events documented for document objects for some reason.  is there a reason why we aren't documenting them?  Are they documented somewhere else?  I couldn't find them documented anywhere.    

We also should notify lint extension authors that they should update their extensions to listen to the "languageChanged" event since most of them leave cruft behind after changing the language of a javascript file to "text".  We might want to change it to "languageChange" to match the rest of the events if no one is using it yet as well.