Simplify respacing SupSub next to \int's #simplify
Fix respacing PlusMinus

If there's lost in a row, like 1++++2, they should all be unary
operators on the 2 except for the first, like, 1 + +++2, not only the
rightmost one being a binary operator. Also, the binary operator to the
left will have padding, so no reason to have padding on a unary
operator.
Fix spacing unitalicized operators next to numbers
First pass horizontal panning  #cherrypick

Since a wrapping behavior for math is ill-specified, mathquill fields
now pan like <input/>'s.

So for dumb reasons, CSS2.1 specifies that the baseline of an
inline-block that is overflow:hidden is its bottom margin edge [1]
(not for no reason, I admit [2]). For now just set vertical-align:middle
to look reasonable for the common case, eventually I'll adjust the
vertical-align numerically in JS (after all, I already have
Node::expectedCursorYInside).

[1]: http://lists.w3.org/Archives/Public/www-style/2013Jul/0188.html
[2]: http://lists.w3.org/Archives/Public/www-style/2013Jul/0471.html

Note the comment above &:after[3].

[3]: https://bugs.webkit.org/show_bug.cgi?id=35443#c1

The margin-right was switched to margin-left in order to fix a 1px shift
when the cursor is at right edge in Firefox.  The cursor had a negative
`margin-right` so when it's at the right edge, it overflows which
increases the `scrollWidth1 and since `.scrollHoriz()` is pushing to
scroll as far right as possible, the entire editable scrolls to the
right by 1px.

Shrink textarea to smallest nonzero width and height so it won't affect
the minimum scroll{Width,Height} of the container. This took quite a
while to track down the other day, the only symptom was that the
scrollWidth was a weirdly big number, there's not a lot of people
talking about what affects scrollWidth. (Must be nonzero so that
textarea is visible and hence focusable.)

The basic idea behind `_.scrollHoriz` is to scroll by a minimal amount
while maximizing the amount of the selection shown, and while keeping
the cursor within inner bounds of the textbox (i.e. 20px from the
edges).
Fix defunct keyboard selection

https://github.com/mathquill/mathquill/pull/261#issuecomment-37909258
https://github.com/mathquill/mathquill/commit/32a48e4a4f2cd3ecaedcf36faac5c84fe590acc9#commitcomment-5721473
I somehow forgot to update `seln.first === cursor.next` to
`seln.ends[L] === cursor[R]`. This caused the keyboard to only select in
one direction.
Fix horizontal panning with mouse selection

https://github.com/mathquill/mathquill/commit/32a48e4a4f2cd3ecaedcf36faac5c84fe590acc9#commitcomment-5734244
Merge branch 'dev' into feature.nowrap

Conflicts:
	src/services/keystroke.js
	- `feature.nowrap` added .scrollHoriz() calls to
	  Node::keystroke()
	- 1bbe5a4afb20670774b636fc0c90dc9e2b3da583 on `dev` deleted some
	  unnecessary return values also in Node::keystroke()
Fix editable fields 6px wider than they should be #stupidBoxModel
Rm unnecessary newline #whitespace #cosmetic
Move scrollHoriz out of keystroke.js into own file

It's also called by mouse.js and textarea.js, shouldn't be in
keystroke.js.
Typing <= or >= will result \le or \ge
Remove obsolete .addClass('hasCursor') #cleanup

Has been obsolete for 4 years, since [f44c868][] added a .focus() call
(then called .removeEmpty()) to Cursor::show, which calls
.addClass('hasCursor')[1], and which itself was called by the 'focus'
event handler on the textarea[2].

[f44c868]: f44c8689ac7b849c63cb4380d0d3978115365a27
[1]: https://github.com/mathquill/mathquill/blob/f44c8689ac7b849c63cb4380d0d3978115365a27/src/backend.js#L177
[2]: https://github.com/mathquill/mathquill/blob/f44c8689ac7b849c63cb4380d0d3978115365a27/src/frontend.js#L781
Add global API fn to make 'sqrt'/'pi' autocommands

The API function lets you specify that certain LaTeX control sequences
(letters only, length at least 2) automatically render when you type
those letters in sequence, without having to type backslash first.

For example, normally to get a SquareRoot you have to type \sqrt and
then space or tab or enter; after MathQuill.addAutoCommands('sqrt'),
you can just type 'sqrt'.

MathQuill.addAutoCommands parses the autocommands list and adds them to
hash set. Letter::createLeftOf checks previously typed text against
this hash set.
Handle intentional blur

That is, if the typist deliberately clicks outside an editable field,
the selection clears and any ghost parens solidify; but if the typist
just switches tabs/windows and switches back, nothing should change.

[QuirksMode][1] reports a few browser bugs with focus events on the
window but none with blur events on the window registered in the
bubbling phase.

[This widely cited blog post][2] agrees except that in IE6/7 (others
versions not mentioned), spurious blur events fire on the window "when
the focus went from the body to an input or link"; in other words, if
the page is in focus but no particular element is focused
(document.activeElement === document.body), and then something on that
page is focused (the page remains in focus, so sane browsers don't fire
blur on the window). Luckily that doesn't affect this code, we're not
listening for blur on the window except immediately after a blur on
MathQuill's hidden textarea.

[1]: http://www.quirksmode.org/dom/events/blurfocus.html
[2]: http://www.thefutureoftheweb.com/blog/detect-browser-window-focus
Remove unused style ruleset #cleanup

https://github.com/mathquill/mathquill/commit/32a48e4a4f2cd3ecaedcf36faac5c84fe590acc9#commitcomment-5763557
Remove unnecessary and bug-triggering style rules #cleanup

These (actually, just the width) are triggering a bug in Webkit causing
the whole page to jump around:
https://github.com/mathquill/mathquill/pull/261#issuecomment-38333601

And are totally unnecessary, the textarea is outside of and can't affect
the scrollWidth of the .mathquill-root-block:
https://github.com/mathquill/mathquill/pull/261#commitcomment-5763880
Remove unnecessary .scrollHoriz() call

In fact, it was causing demo.html to throw an exception on load, because
it calls .keydown(), which eventually calls .keystroke() without a key,
which makes this .scrollHoriz() call that has no preceding cursor.show()
call.
selectTowards shan't call cursor.startSelection()

Should've been removed from MathCommand::selectTowards way back:
https://github.com/mathquill/mathquill/commit/44e5c97ece0c459fe6714d83e9b27b9015706709#commitcomment-5768270

Should never have been in TextPiece::selectTowards in the first place,
this is what I really meant to do to fix the anticursor's tree pointers.
Doing cursor.startSelection() worked because this line is only reached
in the case that the cursor and anticursor are at the same point in the
tree.
Move Cursor::{start,end}Selection before ::select #cleanup

Because Cursor::select relies on Cursor::startSelection, and it's gonna
rely on it more.
Persistent anticursor ancestor map inst. of Fragment.between

While selection is in progress, the tree can't change (typing calls
Cursor::endSelection via the `notify` system), so there's no reason for
Fragment.between to do its stupidly complicated and prematurely
optimized tree traversal every time, when it's much simpler to get the
whole ancestor chain of the anticursor once, then have the cursor just
check against that to find the LCA and the ends of the selection.

Since this is now inlined directly into Cursor:;select, the test cases
were moved out of tree.test.js into their own select.test.js.

Also, prep for MathCommand::unselectInto using the anticursor's reverse
ancestor chain instead of .selectedOutOf (which is only set if the
selection was initially made by keyboard rather than mouse), and for it
being possible for the directionality of the selection (whether the
cursor was to the left or right of the anticursor, and hence which end
of the selection it should be at) to be available to Cursor::select (see
next commit).