First pass at a new event system:
- EventDispatcher utility for adding on()/off()/trigger() APIs to any object.
Currently still backed by jQuery events under the hood. But catches exceptions
a *little* better (no more handlers get the event, but code after the trigger()
call still gets to run, at least).
- $() wrapper for legacy support
- Catch deprecated events at on() time instead of dispatch time. More useful
stack, and simplifies DeprecationWarning code.

Initially used just for DocumentManager, Document module, & Document
instances.

Circular references mean that we can't safely assume any APIs, including the
new on() API, exist on modules like DocumentManager immediately after require()ing
them. So some event registration needed to move into htmlReady(). No one
should be dispatching events before then anyway.
* Reimplement new event system based on our own code instead of jQuery. Adds
better exception robustness, and should be faster & more memory-efficient.
makeEventDispatcher() can now be called safely on prototype objects.
* Add unit tests for new event system.
- Make EventDispatcher robust to concurrent mutation of event list
- Add one() support on EventDispatcher
- Add triggerWithArray() utility in EventDispatcher
- Fix bug in initial EventDispatcher conversion of EditorManager
Convert Brackets core code over to new EventDispatcher APIs for all non-DOM
events.
- Does NOT convert PreferencesSystem & PrefixedPreferencesSystem yet, since
they have existing impls of on()/off() with a different signature
- Several modules with circular references now must wait until htmlReady()
to register event handlers on other modules, since the other module is
initially empty (no on() API to call):
    - KeyBindingManager listeners on CommandManager
    - FileViewController listeners on MainViewManager
    - ProjectManager listeners on FileViewController & MainViewManager
- Removes legacy NodeConnection "." event separators, deprecated since 0.37
- Remove 'promises' member of "projectOpen" Event object, which was very old
and doesn't seem to have been used in a long time.
- Remove RecentProjects code that listens for events on SidebarView, since
it stopped triggering those events 2 years ago (in df7a4956). The
"beforeExecuteCommand" listener in PopUpManager covers the same case now.
- Remove unused '$' JSLint annotations (Travis/JSHint complains)
- Finally actually mark Editor "keyEvent" as deprecated
- Fix one last case in JS code hints where $() was being used for non-DOM
events
- Fix cases where our code says 'jqEvent' but it's now an EventDispatcher
event instead
- To resolve circular dependency issues when attaching event listeners to
other modules, instead of waiting for htmlReady() (which doesn't work in
unit tests - see #9960) use a utility to safely attach listeners ahead of
the modules actually initializing
- Fix bug #9903 (ImageViewer file-rename listener leak)
- Log console errors if any core code tries to use $() on an EventDispatcher
- Convert PreferencesSystem & PrefixedPreferencesSystem to use EventDispatcher,
while preserving their existing public API with nonstandard on()/off() APIs
- Remove long-deprecated ability to create resizable bottom panels via
makeResizable() without using createBottomPanel(). (Simplifies code a bit,
but leave in a console error log in case anyone hits this in the future).
- Fix Editor docs about keyboard events
- Docs & error message tweaks from code review
- Simplify assert() calls that are meant to force a debugger pause
Fix bug with detaching one() listeners via off(), spotted thanks to a
question from @Mark-Simulacrum. With unit tests.
* Mark DocumentManager's old events as deprecated *before* extensions have
a chance to register for them. Clean up docs.
* Fix $() shim warning: it was incorrectly flagging r.js-concatenated
extensions as core code, since the whole path prefix is wiped off in that
case. Unfortunately the same is true of core code in production builds,
making the two indistinguishable. So: only flag as core code when the path
indicates a dev build
Merge pull request #9918 from adobe/pflynn/robust-events

New, more robust event-dispatching system