Fix expression editor for Perseus One.

I had previously failed to test it in the site due to datastore issues,
but now I have that sorted out.

Things this does:
* make sure all answer forms always have a key
* make sure answer forms are serialized so they don't mysteriously
  disappear after adding them

Test plan:
* Distributive Property:
  - answer an existing question correctly, get credit
  - answer one wrong, don't get credit
* Editing Distributive Property
  - open an existing item, see that it has one answer form, labeled correct
  - create a new expression with a couple forms
  - reload, see that they're the same
  - never see a react warning

Auditors: emily
Add beginnings of a parser.

Summary:
I'm using jison somewhat arbitrarily but it seems to have more uptake
than peg.js.

It's worth noting that I wrote
[jison-loader](https://github.com/joelburget/jison-loader), but it's
trivial.

At the moment this thing can successfully parse "5 m^2" but not "5.5 m"
or "5 m/s".

One more note - the "browser: { fs: false }" thing is because the
jison-generated code includes a require of fs, which blows up unless we
tell webpack to ignore it.

Test Plan:
Successfully load the perseus test page and attempt to parse the examples above
with `p`.

Reviewers: alex

Subscribers: aria

Differential Revision: http://phabricator.khanacademy.org/D14288
Add old unit input widget.

Summary:
Right now this thing is very rudimentary, but it can:
* grade answers
* actively give feedback on whether your input parses

Test Plan:
In perseus, add a new unit-input and test:
* the parsing indicator changes as I type
* "Check Answer" tells me "I couldn't understand those units." when I
  enter nonsense
* when the answer is "5x10^2 kg m / s^2", "500 kg m / s^2" is graded as
  correct
* I also tried a few wrong answers which were graded as incorrect

Reviewers: alex

Subscribers: aria

Differential Revision: http://phabricator.khanacademy.org/D14346
Add fluid ounces, more tests.
Use KAS unit support.

Summary:
I moved the parser to KAS and am now using KAS for equality checking as
well.

Test Plan:
Confirm on the test page that with the answer set to "5x10^5 kg m /
s^2",
* "5x10^5 kg m / s^2" is graded as correct
* "5x10^5 kg" is graded as incorrect
* "5x10^5 N" is graded as correct

Reviewers: alex

Subscribers: aria

Differential Revision: https://phabricator.khanacademy.org/D15055
Add controls for accepting only certain units.

Test plan: none (will test comprehensively when finished with the whole
thing)

Auditors: alex
Show a nice message on parse failure.

Test plan:
* create invalid parse, tab away, the error message appears immediately
* tab back, fix parse, it goes away immediately
* create invalid parse, wait two seconds, the error message appears
* fix parse, it goes away immediately
* tab away, no message appears

Auditors: alex
Show examples of the acceptable units.

Test plan:
gifs:
* https://s3.amazonaws.com/uploads.hipchat.com/6574/29028/rbjOWj2NLhWxWib/units.gif
* https://s3.amazonaws.com/uploads.hipchat.com/6574/29028/o6niUvrwe7S2eJb/week.gif

Auditors: alex
Add sigfigs input.

Test plan:
https://s3.amazonaws.com/uploads.hipchat.com/6574/29028/P6Tx0M11BhotTst/tsp.gif

Auditors: alex
Add validation and unit widget unit tests.

Test plan:
./node_modules/.bin/mocha --reporter spec -r node/environment.js
src/widgets/__tests__/unit-test.jsx

Auditors: alex
Remove unit parser test.