Radio: Make labels work on mobile (non-broken?)

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.

This implementation makes the pseudo-label and checkbox
independent, to avoid the bug the last version of this caused.

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
 * Now tested with multiple selections, both clicking on the
   checkboxes and the labels

Reviewers: eater

Reviewed By: eater

Subscribers: alpert, ben

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