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.
DEL/FORWARD_DELETE should actually be BS/DEL in vim's terminology

Fixes: #523
Add +popEvaluator

When an evaluator returns +popEvaluator it means that it shall be popped
and the parent evaluator should go on.
Document all visual missing commands with nice errors

At least it's nicer for the user than failing or worse.
Improve encapsulation of XVimTextObjectEvaluator, improve clearing of the argument string

only have a "motion" selector to return the computed motion, instead of
everybody doing that.

Also improve the status line when the text evaluator is active in visual
mode: keep printing -- VISUAL* -- and do not forget to reset the argument
string if the text evaluator failed.

Do not fail the visual mode if the motion fails, or a g command fails,
which is what vim does (it also does a bell in that case, but oh well).
Various memory leaks fixed
First stab at block edit: v_b_[AcCI]

Right now, undo isn't quite doing what's right, but if we plug
NSUndoManager with grouping, then the test-suite starts failing in various
odd ways, to be fixed later.

Fixes: #486
Fix cursor positions after delete and yank to match vim
Define NS_REQUIRES_SUPER for older SDKs so that it builds
Add helpers to create strings made of spaces, and remove spaces at a given position
Reimplement xvim_shift to handle block shift properly

Do not use xcode shiftRight/shiftLeft anymore, it's easy to implement and
we need the work done for shifting at a given column, and what XCode does
is just the shift at column 0, so just use our own work.

rework xvim_blockInsertFixupWithText to operate on the first line too, and
adapt XVimInsertEvaluator to handle that change, because
xvim_blockInsertFixupWithText does the bulk of what ShiftRight is.

This implements `v_b_<` and `v_b_>`
Fix an annoying bug: `i_CTRL-w shouldn't yank!
Match undocumented vim behaviors for A and I in visual line/char modes
Implement: C, D, X, Y in non block mode properly

Those force linewise as if V was called (gv goes back in linewise mode
after that).

So implement that.
Add a fast way to look at an NSString
Monstrous commit from hell

I managed to rm -rf my .git and lost all my commit logs, so I'll try to
explain what those 3 days of work are doing.

XVimWindow
**********

First, I've beeen simplifying the hooking of XVimWindow to be a bit
cleaner, use one single Associated Object, let the window own its command
line, and things like that.

XVimTextStoring
***************

I also started a clean XVimTextStoring protocol, and ported the
NSTextStorage VimOperations category to implement it. The protocol is a
bit overkill, but it can help us detect at runtime whether our code was
hooked properly by checking whether the NSTextStorage instances we're
looking at are hooked properly.

I also moved the specific DVT* optimizations of that implement the default
NSTextStorage+VimOperations in a more efficient way to a separate file,
and if you want to support an alternate NSTextStorage subclass, then
that's how you should do it, it keeps code separated.

In the category, I've started migrating many of the functions that were in
the VimOperation category, with a unified naming and conventions,
vocabulary. Typically Position is now reserved for XVimPosition, Index for
index in the xvim_string and so forth.

All the functions there are xvim_ prefixed to avoid accidental clashes at
runtime, and for debugging purposes: it's way simpler if we see xvim_ in
the selector name to understand it's ours.

A big change is that I've been using more Cocoa code to detect where line
start and end, and I've declared the war on isWhitespace, isNewline and so
forth. This will end up having a more consistent notion of linenumbers
than the default XCode UI. It also means that we probably will end up
supporting CR/LF/CRLF files more transparently.

XVimBuffer
**********

I've added an empty class, and a new XCode group about "Buffer". The idea
is to really have a Buffer object like in vim, that represents the file
content. The textStorage is its storage, but it will have references to
the undo manager, and anything related.

The NSTextView is pretty much the same notion as a window in vim, IOW you
can have several "views" on that file, and remembering anything related to
the NSTextView is bogus, because the view can change its storage, its
whole stack. In vim, even the visual selection isn't per window but per
view. Very little is per window, but for the cursor position.

So the plan is to move most of the code away from the NSTextView category
into the NSTextStorage one. We may want to have several of them for
readability purposes obviously.

Dropped code
************

Some dead code has been stripped.
And several selectors like -nextPositionFrom:matchingColumn:returnNotFound:
have been removed, because they can be easily reimplemented with the new
ones with a better semantics. Typically for -nextPositionFrom:..., the
fact that the column should be after the column of the index argument was
never used by any caller (they all went to the beginning of the line first
to avoid that artifact), and it was actually hard to maintain.

So simpler alternatives have been chosen in a lot of places.