[Initial review only] Editor APIs and edit ops for multiselection

Putting this up so others can take a look at it as I go along. The main multiselect editor APIs and unit tests are done. I also tweaked the status bar so it shows "n selections" instead of "n columns/lines selected" if there are multiple selections.

Note that the existing Editor APIs didn't have to change at all in most cases, since they call CM APIs that already just look at the primary selection. I did add unit tests for all of them however.

We might want to go ahead and review and pull this into `cmv4` so that we can unblock the keyboard selection work in https://trello.com/c/oRlwWPcw.

Note on the API style: We handle selection ranges differently than in CodeMirror in a way that seems more straightforward for edit operations. Rather than having "anchor" and "head", either of which could be earlier in the document, each range has a "start" and an "end", with the start guaranteed to be <= the end. If the anchor of the range is the end, then "reversed" is set on the range. Also, rather than specifying the primary selection by index in `setSelections()`, we set an attribute on the range. `getSelections()` works symmetrically, so this makes it a lot easier for edit ops to easily track primary and reversed selections through an edit without a lot of work.

Also note that I augmented the existing `getSelection()` API to also add the `reversed` property (we don't add `primary` since `getSelection()` always returns the primary selection by definition). This shouldn't break normal callers of the API since it's just an added property, but it did break some unit tests that were using `toEqual()` to test the return value (since they now have to account for the additional property). I think that's ok, but let me know if you disagree.

Update: started implementing a number of edit ops as well. Added some helper APIs to make writing multiselect-aware edit ops easier.