Fix vim shift insertion point in any mode

When using > or <, vim puts the cursor at the first non blank character of
the first shifted line, just do that.

Adapt tests, in particular add a test to check that undo goes back to the
right position.
Reimplement -nextPositionFrom:matchingColumn:returnNotFound: to be O(n)

It used to be O(n^2)

Also improve some other functions now that this one is fast.
Vastly improve XVim visual mode

Use DVTKit -characterRangeForLineRange/-lineRangeForCharacterRange
Hopefully it has a better complexity than O(length_of_document)

Implement $ in c_v mode, which fixes: #522

Support yank/paste with tabs

    This goes through getting rid of the bogus uses of xvim_selectedRanges,
    this is only ever legal to use it when talking to DVTKit or when we're
    doing something that isn't bogus when there are tabs in the selected
    ranges.

    The remaining users are:
    - xvim_swapCase, xvim_makeLowerCase, xvim_makeUpperCase ok because tabs
      aren't touched
    - xvim_syncState which is talking to DVTKit

    I dropped xvim_selectedRangesAsSeparatedLines because it's just a recipe
    for disaster.

    Yanking and replacing a block with the yank buffer has been rewritten
    significantly for block based selection, and mostly untouched but
    refactored for other selection modes.

    I've tested this using the visual-examples text from vim's visual.txt
    help, trying several selections involving tabs, selecting to end of line
    and so forth.

Fixes: #522
Implement visual commands o/O

This commit improves on _xvim_selectedBlock so that it expands when
corners are on tabs, like vim does
Support vim's gJ and v_gJ

This just joins lines without playing tricks with spaces
Positions after undo or gv are still a mess though.
Merge pull request #562 from tonyd256/develop

Use number option when using relativenumber option
Fix #564
Merge commit 'ab6691e' into develop

* commit 'ab6691e':
  Fix vim shift insertion point in any mode
Merge commit '4473e' into develop

* commit '4473e':
  Reimplement -nextPositionFrom:matchingColumn:returnNotFound: to be O(n)
Merge commit '764e21b' into develop

* commit '764e21b':
  Vastly improve XVim visual mode
Merge commit '53aa681' into develop

* commit '53aa681':
  Implement visual commands o/O
Fix name of methods
Merge commit 'd94fd70' into develop

* commit 'd94fd70':
  Support vim's gJ and v_gJ