Add preventDefault onTouchStarts to interactives

Summary:
On Mobile, touch events that aren't captured will be sent to the
scratchpad and cause drawings. We don't want this to happen for
interactive things, so we instead capture those touch events here.

Test Plan:
 * Check that you can still click on an input on mobile
 * Check that dragging on an input with the scratchpad open doesn't
   draw over/under it.

Reviewers: charlie, kasra

Reviewed By: kasra

Differential Revision: http://phabricator.khanacademy.org/D9891
"Click to add points" allows for drag on mouse down, works on touch devices

Summary:
"Click to add points" now creates the point (or vertex) on mouse-down and allows the user
to drag it into position before releasing. For polygons, the resulting edge is also displayed as
the user drags around the new vertex. The same functionality works on touch devices as well.

Test Plan:
- Run Perseus.
- Go to these examples: [points](http://localhost:9000/test.html#content=%7B%22question%22%3A%7B%22content%22%3A%22%5Cn%5B%5B%E2%98%83%20interactive-graph%201%5D%5D%22%2C%22images%22%3A%7B%7D%2C%22widgets%22%3A%7B%22interactive-graph%201%22%3A%7B%22type%22%3A%22interactive-graph%22%2C%22graded%22%3Atrue%2C%22options%22%3A%7B%22step%22%3A%5B1%2C1%5D%2C%22backgroundImage%22%3A%7B%22url%22%3Anull%2C%22scale%22%3A1%2C%22bottom%22%3A0%2C%22left%22%3A0%7D%2C%22markings%22%3A%22graph%22%2C%22labels%22%3A%5B%22x%22%2C%22y%22%5D%2C%22showProtractor%22%3Afalse%2C%22showRuler%22%3Afalse%2C%22rulerLabel%22%3A%22%22%2C%22rulerTicks%22%3A10%2C%22range%22%3A%5B%5B-10%2C10%5D%2C%5B-10%2C10%5D%5D%2C%22gridStep%22%3A%5B1%2C1%5D%2C%22snapStep%22%3A%5B0.5%2C0.5%5D%2C%22graph%22%3A%7B%22type%22%3A%22point%22%2C%22numPoints%22%3A%22unlimited%22%7D%2C%22correct%22%3A%7B%22type%22%3A%22point%22%2C%22numPoints%22%3A%22unlimited%22%2C%22coords%22%3Anull%7D%7D%7D%7D%7D%2C%22answerArea%22%3A%7B%22type%22%3A%22multiple%22%2C%22options%22%3A%7B%22content%22%3A%22%22%2C%22images%22%3A%7B%7D%2C%22widgets%22%3A%7B%7D%7D%2C%22calculator%22%3Afalse%7D%2C%22hints%22%3A%5B%5D%7D), [vertices](http://localhost:9000/test.html#content=%7B%22question%22%3A%7B%22content%22%3A%22%5Cn%5B%5B%E2%98%83%20interactive-graph%201%5D%5D%22%2C%22images%22%3A%7B%7D%2C%22widgets%22%3A%7B%22interactive-graph%201%22%3A%7B%22type%22%3A%22interactive-graph%22%2C%22graded%22%3Atrue%2C%22options%22%3A%7B%22step%22%3A%5B1%2C1%5D%2C%22backgroundImage%22%3A%7B%22url%22%3Anull%2C%22scale%22%3A1%2C%22bottom%22%3A0%2C%22left%22%3A0%7D%2C%22markings%22%3A%22graph%22%2C%22labels%22%3A%5B%22x%22%2C%22y%22%5D%2C%22showProtractor%22%3Afalse%2C%22showRuler%22%3Afalse%2C%22rulerLabel%22%3A%22%22%2C%22rulerTicks%22%3A10%2C%22range%22%3A%5B%5B-10%2C10%5D%2C%5B-10%2C10%5D%5D%2C%22gridStep%22%3A%5B1%2C1%5D%2C%22snapStep%22%3A%5B0.5%2C0.5%5D%2C%22graph%22%3A%7B%22type%22%3A%22polygon%22%2C%22numSides%22%3A%22unlimited%22%2C%22snapTo%22%3A%22grid%22%7D%2C%22correct%22%3A%7B%22type%22%3A%22polygon%22%2C%22numSides%22%3A%22unlimited%22%2C%22coords%22%3Anull%2C%22snapTo%22%3A%22grid%22%7D%7D%7D%7D%7D%2C%22answerArea%22%3A%7B%22type%22%3A%22multiple%22%2C%22options%22%3A%7B%22content%22%3A%22%22%2C%22images%22%3A%7B%7D%2C%22widgets%22%3A%7B%7D%7D%2C%22calculator%22%3Afalse%7D%2C%22hints%22%3A%5B%5D%7D)
- Test in Chrome with emulator.
- Test on a live iPad + iPhone.
- Verified:
    - Point/vertex stays within graph even when user drags off the edge.
    - Point/vertex deletes when user drags to trash (even on first click).
    - Point retains orange animation (on browser; mobile is less certain).

Reviewers: eater, jack

Reviewed By: jack

Differential Revision: http://phabricator.khanacademy.org/D9434
Graph instructions now display on top of the (opaque) graph, disappear on click

Summary:
Test run for a new approach to displaying graph instructions. Graph's
now have an "instructions" prop that can be passed down, and the InteractiveGraph
tracks whether or not the user has clicked on the graph (to avoid re-displaying
the instructions if the user clicks and then deletes points). At a high level,
the instructions are managed by the Graph, rather than (e.g.) a surrounding div
to allow for more accurate and reliable styling.

Test Plan:
- See [multiple interactive-graphs](http://localhost:9000/test.html#content=%7B%22question%22%3A%7B%22content%22%3A%22%5Cn%5B%5B%E2%98%83%20interactive-graph%201%5D%5D%5Cn%5Cn%5Cn%5B%5B%E2%98%83%20interactive-graph%202%5D%5D%5Cn%5Cn%5Cn%5B%5B%E2%98%83%20interactive-graph%203%5D%5D%22%2C%22images%22%3A%7B%7D%2C%22widgets%22%3A%7B%22interactive-graph%201%22%3A%7B%22type%22%3A%22interactive-graph%22%2C%22graded%22%3Atrue%2C%22options%22%3A%7B%22step%22%3A%5B1%2C1%5D%2C%22backgroundImage%22%3A%7B%22url%22%3Anull%2C%22scale%22%3A1%2C%22bottom%22%3A0%2C%22left%22%3A0%7D%2C%22markings%22%3A%22graph%22%2C%22labels%22%3A%5B%22x%22%2C%22y%22%5D%2C%22showProtractor%22%3Afalse%2C%22showRuler%22%3Afalse%2C%22rulerLabel%22%3A%22%22%2C%22rulerTicks%22%3A10%2C%22range%22%3A%5B%5B-10%2C10%5D%2C%5B-10%2C10%5D%5D%2C%22gridStep%22%3A%5B1%2C1%5D%2C%22snapStep%22%3A%5B0.5%2C0.5%5D%2C%22graph%22%3A%7B%22type%22%3A%22point%22%2C%22numPoints%22%3A%22unlimited%22%7D%2C%22correct%22%3A%7B%22type%22%3A%22point%22%2C%22numPoints%22%3A%22unlimited%22%2C%22coords%22%3Anull%7D%7D%7D%2C%22interactive-graph%202%22%3A%7B%22type%22%3A%22interactive-graph%22%2C%22graded%22%3Atrue%2C%22options%22%3A%7B%22step%22%3A%5B1%2C1%5D%2C%22backgroundImage%22%3A%7B%22url%22%3Anull%2C%22scale%22%3A1%2C%22bottom%22%3A0%2C%22left%22%3A0%7D%2C%22markings%22%3A%22graph%22%2C%22labels%22%3A%5B%22x%22%2C%22y%22%5D%2C%22showProtractor%22%3Afalse%2C%22showRuler%22%3Afalse%2C%22rulerLabel%22%3A%22%22%2C%22rulerTicks%22%3A10%2C%22range%22%3A%5B%5B-10%2C10%5D%2C%5B-10%2C10%5D%5D%2C%22gridStep%22%3A%5B1%2C1%5D%2C%22snapStep%22%3A%5B0.5%2C0.5%5D%2C%22graph%22%3A%7B%22type%22%3A%22linear%22%7D%2C%22correct%22%3A%7B%22type%22%3A%22linear%22%2C%22coords%22%3Anull%7D%7D%7D%2C%22interactive-graph%203%22%3A%7B%22type%22%3A%22interactive-graph%22%2C%22graded%22%3Atrue%2C%22options%22%3A%7B%22step%22%3A%5B1%2C1%5D%2C%22backgroundImage%22%3A%7B%22url%22%3Anull%2C%22scale%22%3A1%2C%22bottom%22%3A0%2C%22left%22%3A0%7D%2C%22markings%22%3A%22graph%22%2C%22labels%22%3A%5B%22x%22%2C%22y%22%5D%2C%22showProtractor%22%3Afalse%2C%22showRuler%22%3Afalse%2C%22rulerLabel%22%3A%22%22%2C%22rulerTicks%22%3A10%2C%22range%22%3A%5B%5B-10%2C10%5D%2C%5B-10%2C10%5D%5D%2C%22gridStep%22%3A%5B1%2C1%5D%2C%22snapStep%22%3A%5B0.5%2C0.5%5D%2C%22graph%22%3A%7B%22type%22%3A%22polygon%22%2C%22numSides%22%3A%22unlimited%22%2C%22snapTo%22%3A%22grid%22%7D%2C%22correct%22%3A%7B%22type%22%3A%22polygon%22%2C%22numSides%22%3A%22unlimited%22%2C%22coords%22%3Anull%2C%22snapTo%22%3A%22grid%22%7D%7D%7D%7D%7D%2C%22answerArea%22%3A%7B%22type%22%3A%22multiple%22%2C%22options%22%3A%7B%22content%22%3A%22%22%2C%22images%22%3A%7B%7D%2C%22widgets%22%3A%7B%7D%7D%2C%22calculator%22%3Afalse%7D%2C%22hints%22%3A%5B%5D%7D).
- Notice that the instructions disappear on click.
- You could also add and delete some points; notice that the instructions do not reappear.

Reviewers: jack

Reviewed By: jack

Differential Revision: http://phabricator.khanacademy.org/D9705
Removed hard-coding of light blue in plotter.jsx

Test Plan:

- Check out the plotter [here](http://localhost:9000/test.html#content=%7B%22question%22%3A%7B%22content%22%3A%22%5B%5B%E2%98%83%20plotter%201%5D%5D%22%2C%22images%22%3A%7B%7D%2C%22widgets%22%3A%7B%22plotter%201%22%3A%7B%22type%22%3A%22plotter%22%2C%22graded%22%3Atrue%2C%22options%22%3A%7B%22correct%22%3A%5B1%5D%2C%22starting%22%3A%5B1%5D%2C%22type%22%3A%22bar%22%2C%22labels%22%3A%5B%22%22%2C%22%22%5D%2C%22categories%22%3A%5B%22%22%5D%2C%22scaleY%22%3A1%2C%22maxY%22%3A10%2C%22snapsPerLine%22%3A2%2C%22labelInterval%22%3A1%7D%7D%7D%7D%2C%22answerArea%22%3A%7B%22type%22%3A%22multiple%22%2C%22options%22%3A%7B%22content%22%3A%22%22%2C%22images%22%3A%7B%7D%2C%22widgets%22%3A%7B%7D%7D%2C%22calculator%22%3Afalse%7D%2C%22hints%22%3A%5B%5D%7D)
- Notice that the colors remain unchanged
Add Perseus API ClassNames for Radio widgets

Summary:
Adds three ClassNames to the perseus api:

    "perseus-radio-option",
    "perseus-radio-selected",
    "perseus-radio-option-content"

Test Plan:
Manually inspected a perseus radio widget and looked for
the appropriate classes

Reviewers: ben

Reviewed By: ben

Differential Revision: http://phabricator.khanacademy.org/D9956
Radio: Make labels work on mobile

Summary:
There is a long-standing mobile webkit bug with labels, where
clicking the text inside a label won't check the input correctly.

This diff adds onTouchStart and onTouchEnd handlers to the radio
labels that re-implement the label elements' functionality in
react, so that perseus radio labels work correctly on mobile.

This diff also changes the radio's implementation to use
pure controlled components, rather than grabbing the DOM state
of radio/checkbox inputs after an event occurs.

Test Plan:
On the web:
 * Tested grading various radios in normal chrome's test.html
In the mobile app:
 * Tested clicking on a wrong answer, then a right answer's text,
   and made sure that doing this on multiple questions graded
   correctly

Reviewers: eater, ben

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