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
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.