Switch language / syntax mode of current document

This is an update of @JakeStoeffler's PR #4276.  It's merged up with the latest master and addresses the main code review comments I made there.  I also added some simple unit tests.

I still have two concerns about merging this immediately, though:

**1)** The dropdown UI doesn't look great. It uses a native `<select>`, which is just hard to style... and the way the statusbar is laid out makes it look misaligned in this case:
![language picker](https://f.cloud.github.com/assets/1197510/1867075/419e3564-7847-11e3-85ec-1e33455f62bf.png)

It would look nicer if we used an HTML popup like code hints, context menus, and the Recent Projects dropdown... but it would definitely add a bunch more work here.  So maybe we can skate by with the current `<select>`-based UI for now.  @larz0, any thoughts?

**2)** This foregrounds all the bugs in #2911 a lot more.  I added a checklist of issues there.  Are there any that are prominent enough to act as blockers here?  (JS code hints seems like it might be the most glaring issue, but unfortunately that's one of the harder ones to fix too).
There's a potential edge case where this does unneeded work, because it's possible that current document != active editor.  If focus is in an inline editor but something causes the outer editor's language to change, this code would refresh listeners for the inline editor (even though it hasn't changed language) when in fact nothing needs to be done (because JS code hints only care about the language of the active editor, so the change to the host editor didn't matter).  However, you can't hit that with the status bar UI -- you'd have to edit prefs.json or something else in order to change the non-active editor's language.

I think we could clean this up by removing this code and taking away the current-document check in the handleActiveEditorChange() code above.  Not a big deal, though...