Cleanups to status bar language-switcher:
* 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 that
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
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.
* Gray out status-bar language switcher's "Set as Default" item if the doc's
current language is already the default (i.e. there's no path-specific override).

DropdownButton changes:
* Support disabled items
* Fix bug #8433 (Page Up/Down work oddly) - Only wrap around to other end
of list when using arrow keys. Page Up/Down 'stick' at start/end of list
instead (so they will act like Home/End when there's no scrollbar).
* Add Home/End key support
Code review fixes:
* Use .hasClass() instead of .is() where possible
* More succinct math operators in DropdownEventHandler._tryToSelect()
* Document language-change events
* Improve some more JS code hints docs
Fix language switcher persistence to work when no custom file extension
mappings are set yet - don't leave default value of pref undefined.

Clarify two other cases of definePreference() calls where we really *do*
want the default value to be undefined by passing it explicitly.

Also: add TODOs for unused Session arg in JS code hints.
Merge pull request #8444 from adobe/pflynn/language-switcher-improvements

Language switcher: connect to prefs & clean up some code