Properly implement overlapping collapsed span restriction
Make vertical motion collapse selection when one exists

Closes #2042
[r mode] Fix bad post-'else if' indentation.
Use separate node for forcing cursor to be scrolled into view

Using the cursor itself was awkward already, but turns out to
also have strange effects (it was somehow treated as having height: 0
in some situations, by all browsers).
In indentLine, clear empty lines when aggressive is false
Use inner mode's electricChars property

Also moves handling of electricChars to readInput, removing
the timeout kludge.

Issue #2029
Work around scrollIntoView/negative margin interaction
Revise algorithm for detecting overlapping ranges
Improve helper system

Add getHelpers and registerGlobalHelper, allow modes to specify arrays
of helper names, support modeProps in mode specifications.

Update foldcode and show-hint to make use of more powerful helper
system by defining an `auto` helper that tries multiple helpers, and
using that as default.
[css mode] Refactor, step 1 (tokenizer)
[css mode] Refactor, step 2 (state machine)
[css mode] Refactor, step 3 (Less support)
[css mode] Add a hintWords helper value
[css-hint addon] Rewrite to work with overhauled css mode
[css mode] Fix bad context management

Closes #2046
[css mode] Tweak indentation when opening @media block on new line

Closes #2047
[javascript-lint addon] Put JSHint options in a sub-object

Passing options causes issues in jshint since lint options are also
passed. These options cause bad option errors in the annotation list.
[css mode] Fix tokenization of paren-wrapped values

Closes #2048
[css mode] Fix previous fix (d3c3a5a2b8df669ed12fe90df4d62a143c0a9d25)

Issue #2048
[css mode] Revise indentation model

Issue #2049