Refactor all exercise- and module-loading code

Summary:
This fixes an annoying race condition where Khan.resetModules was
getting called from loadExercises after a problem had been displayed.
This changes the value of Khan.modules which in turn affects how hints
are displayed if the modules of the new loaded script differ from the
currently-presented exercise.

The code didn't properly distinguish between all loaded modules and
those necessary for the current exercise, so I've separated those into
modulePromises and Khan.modules. In doing so, I refactored how exercises
are loaded to to be cleaner and hopefully easier to understand. Async
code with promises is much nicer than code without.

This should fix everyone complaining about the exercises calling their
children a `var dummy;`.

I got rid of the `contentLoaded` and `exerciseLoaded:*` events that were
being triggered on `Khan` -- neither was in use outside of this file. I
also got rid of `?nocache` support since it was a little bit
inconvenient and I don't ever use it; let me know if you want it back.

Test Plan:
Tested addition_1 and parallel_lines_1 locally; also verified
that in a summative where the subexercises load different modules,
resetModules grabs the right ones. Tested the "Basic addition" and
"Taking derivatives" topics in the real site.

Reviewers: eater, stephanie

Reviewed By: eater

CC: michaelchang

Differential Revision: http://phabricator.khanacademy.org/D1062