Add new rational expression exercise
Change title
Remove debugging
Set up variables and question
Add hints
Accept both possible answers
Don't accept extraneous solutions
Convert two exercise types to one
New exercise type - identify extraneous solutions
Fix factoring
Attempt to i18nize most of answer-types

Summary:
Wrap some more strings with $._, as well as try to fix up the radio
answer type to something reasonable. Before, we were directly comparing the
"None of the above" string to check if that answer was selected, which was
really ugly especially from an i18n standpoint. Now, I wrap up a lot more data
in the guess object so we can do comparisons in most places that don't involve
the raw string comparisons.

Test Plan:
In general, visit some exercises, see that they don't break. For
radio, go to
http://sandcastle.khanacademy.org/media/castles/xymostech:i18nize-answer-types/exercises/limits_1.html?debug&problem=2&seed=129
and note that the "none of the above" answer works, and that the history still
works (by clicking "problem history").

Reviewers: john, alpert, eater

Reviewed By: alpert

CC: csilvers

Differential Revision: http://phabricator.khanacademy.org/D2377
Keep solution in the DOM in localMode

Useful for converting exercises to perseus questions

Test plan: Loaded exercise in local mode and found $(".solution") via console.

Auditors: alpert
Add \text{} i18n linting to lint_i18n_strings.py

Summary:
Add a filter for i18nizing MathJax \text{}s inside of exercises.
Because these are found inside javascript or inside <code> tags, they aren't
automatically translated as i18n strings, so they need to be manually
surrounded by $._ calls. This automates the process.

Test Plan:
Run lint_i18n_strings_test.py, see that it passes. Run
lint_i18n_strings on the exercises, see that it does something reasonable most
of the time.

Reviewers: csilvers, john

Reviewed By: john

CC: alpert, eater

Maniphest Tasks: T1030

Differential Revision: http://phabricator.khanacademy.org/D2423
Fix set_cdata_mode() for Python 2.7.5, where set_cdata_mode() API changed.

This is not part of the public API, so they're allowed to do that.
(In fact, the API changed in order to fix the very same bug that
required me to override set_cdata_mode() here, so one day this whole
override will be able to go away.)

Test plan:
Fingers crossed
Add another possible answer to multiple choice question
Make the lint script detect more \text{} nodes

If there was more than one text segment in the node, xpath's 'contains'
method would only check the first one, not all of them. This does it
manually using python.

Auditors: john, csilvers
Improve the linter to not re-interpolate

Previously, the regex didn't account for close brackets inside \code{}s,
and they were added by the linter itself, so when the linter was run a
second time, it would re-interpolate and mess everything up. This fixes
that, through the use of a very complicated regex.

Auditors: john, csilvers
Merge pull request #45654 from petercollingridge/rat-exp

Add new rational expression exercise
Make movable points and lines removable

Auditors: eater
Complex numbers captured by regex