Complete the mobile API for the current widgets.

Summary:
Add a markdown file documenting the mobile API. Ensure that all widgets
implement the API, and add support for the mobile API to the matrix and
number-line widgets.

Some involved changes:
 - I split the `focus` function with an optional path into the `focus` function
   (which should focus something in the element) and the `focusInputPath`
   function (which focuses the given path).
 - Removed the `getAcceptableFormatsForInputPath` function, because it isn't
   used by the mobile team, and it isn't clear exactly what it is supposed to
   return (`expression` returned null, `input-number` returned a list of stuff,
   some widgets didn't implement).
 - Messed with matrix's handling of focus and blur events, so that their calls
   to `this.props.onChange` work correctly regardless of the order they come in,
   and so that they don't trigger the focus being changed in weird places.

Test Plan:
 - Make sure `ack getAcceptableFormats` returns nothing
 - Set `staticRender: true` in test.html
 - Open a perseus test page, and add `expression`, `input-number`,
   `numeric-input`, `table`, `matrix`, `number-line`, `transformer`, and
   `simulator` widgets
   - Click the "show tick controller" checkbox on the number-line editor
   - Choose "formal without movement" for the transformer, and add a
     translation, rotation, reflection, and dilation on the transformer widget
   - Choose "percentage" for the simulator (so that we can set the value to
     something more than 1 and see it change)
 - Ensure that the APIOptions are followed by making sure all of the inputs are
   using `MathOutput` widgets
 - Ensure that all the API paths work:
   - Ensure `getInputPaths` works by running `itemRenderer.getInputPaths()`, and
     ensuring the returned list has the same length as the number of inputs on
     the page (should be 31 with the default values)
   - Ensure focus and blur events work by clicking on all inputs, and seeing
     that the `onFocusChange` events in the console get called with appropriate
     paths for all inputs
   - Ensure `focusInputPath` and `blurInputPath` works for all inputs by running:
```
var i = 0;
var focus = function() {
    var paths = itemRenderer.getInputPaths();
    if (i < paths.length) {
        var path = paths[i];
        itemRenderer.focusPath(path);
        setTimeout(unfocus, 500);
    }
};
var unfocus = function() {
    var path = itemRenderer.getInputPaths()[i];
    itemRenderer.blurPath(path);
    i++;
    setTimeout(focus, 500);
};
setTimeout(focus, 2000);
```
      - All the inputs should be focused and then unfocused in order (there
        isn't any visible change ATM, but the `onFocusChange` event should
        trigger for all events.
      - The matrix selection box should move appropriately according to which
        input is focused.
    - Ensure that `setInputValue` works for all inputs by running:
```
var paths = itemRenderer.getInputPaths();
for (var i = 0; i < paths.length; i++) {
    itemRenderer.setInputValue(paths[i], "" + i, false);
}
```
      - All of the inputs should have a different number in them.
      - No `onFocusChange` events should have been called.
    - Ensure that `getDOMNodeForPath` works for all inputs by running:
```
var paths = itemRenderer.getInputPaths();
for (var i = 0; i < paths.length; i++) {
    console.log(itemRenderer.getDOMNodeForPath(paths[i]));
}
```
      - 31 things should be printed to the console
      - Hovering over them in the chrome console should highlight all of the
        inputs in the exercise

Reviewers: michelle, aria, charlie

Reviewed By: aria

Subscribers: charlie

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