Basic expression editing and testing functionality.

Summary:
ExpressionTools exposes two main methods:
parse() attempts to parse a mathematical expression and returns
{ parsed: true, expr:Expr } or { parsed: false, error: Number }.
compare() takes two Expr objects and options to determine equality.

Currently can test that two expressions evaluate equally and/or have the
form (structure and coefficients), and that an expression is simplified.
Now with auto-completion for parentheses!

Test Plan:
Parsing/transformation related tests are in src/expressiontools/test.html
Rendering & editing tests are in test.html and testrender.html
Most important is personal testing on my local KA webapp.

Reviewers: alpert, eater

CC:

Differential Revision: http://phabricator.khanacademy.org/D2394
Automatic merge by 'arc land'

Review: alpert, eater

Conflicts:
	src/editor.js
	test.html
	testrender.html
Refactoring to use React

Summary:
React (http://facebook.github.io/react/) is a new library that Facebook
released last week and it seems awesome. It's designed for defining
components declaratively and helps out with a lot of the stuff that we
were doing by hand before, like only updating the DOM when necessary.

I converted everything except interactive-graph (which I just haven't
gotten to yet).

This is 350 lines shorter (not counting React itself) and much much more
responsive (on my computer, rerendering when editing a hint takes around 2ms
per keypress instead of 60ms previously (!) because lots of DOM manipulation
and other recalculation is avoided).

Test Plan:
Used test.html. Added hints. Removed hints. Added widgets to the
question.  Modified widget properties (e.g., input-number width) and saw
the preview update. Added radio choices.

Used testrender.html. Called zk.scoreInput() in the JS console and got
results appropriate for the radio choices I selected. Called
zk.showHint() and hints appeared.

Reviewers: eater, alex

Reviewed By: alex

CC: joel, jakesandlund

Differential Revision: http://phabricator.khanacademy.org/D2510
Fix table cell alignment
Fix typo; make it possible to update props

Auditors: alex
Fix widget focus on renderer

Auditors: alex
Really fix widget focus on rerender

Auditors: alex
40px not 80px

Auditors: eater
Add "Add a hint" text back

Auditors: eater
Expression styles for local testing
Stopgap fix for interactive-graph type switching

Talking in #reactjs IRC yesterday I learned that this will probably be
simpler if we use props instead of state more -- I'll fix that sometime
soon.

Auditors: alex
Upgrade React to master
Fix expression tests and add two more

Auditors: alex
Add ke (khan-exercises) submodule.

Test Plan: load the test.html
Get unit tests working with JSX.

Test Plan: ran qunit tests.
Begin work on dropdown.
Add a dropdown widget (for things like <, =, >)

Summary:
Add a dropdown widget.

also:
* Add ke (khan-exercises) submodule.
* Get unit tests working with JSX.

Test Plan:
Try the dropdown in both test.html to verify editting and
toJSON. Also try it in testrender.html to verify scoring.

Then try it locally with a built perseus.js in the webapp.

Reviewers: alpert, eater

Differential Revision: http://phabricator.khanacademy.org/D2563
Quick fix to Mul tex rendering.

Test Plan:
src/expressiontools/test.html
src/testrender.html
Removing needless includes from expression tests and adding more tests.

Summary:
The previous quick push was to properly show things like scientific notation.
Mul.tex() was omitting the multiplication sign before any Pow, even if that
Pow's base was numerical. So parse("4*10^5").tex() would equal "410^{5}".

Test Plan: src/expressiontools/test.html

Reviewers: alpert

Differential Revision: http://phabricator.khanacademy.org/D2603
Make expression getInitialState(), render() pure

Auditors: alex