Added the softtabstop setting
First round of tab settings tests

Many more to come.  So far focused on those which don't involve 'sts'
Completed the initial 'softtabstop' tests
Completed insert portion of 'softtabstop'

The insert portion is now complete and passing the designed tests.  May
want to add some more tests later but want to switch focus to getting
the delete portion working.  Once both are working I will begin
dogfooding the changes and author more tests around the feature
Changed GetBackspacingPoint to provide more data

Previously the GetBackspacingPoint function would return simply the
point to which a backspace operation should delete.  In order to
implement 'softabstop' this function needs to provide more information.
A backspace with 'softtabstop' is very possibly a delete + an insert
operation.  Classic case is the following

1. Settings ts=8, sts=4, noet
2. Go to a blank line in insert mode and type <Tab><Tab>.  This will
result in a single \t character being inserted into the file
3. Type <BS> and the result will be 4 spaces on the line.

In that case 'sts' overrides 'noexpandtab' and splits the tab.  The only
logical way to represent this is as a replace operation.

This change simply updates the API to allow for the possibility of the
replace.  I wanted to separate out this change to make sure it didn't
interfere with the existing tests around 'backspace'
'sts' and backspace now working

The interaction between backspace and 'sts' is now working for the key
scenarios.

This change though did break the interaction with backspacing over the
start.  I need to rework that interaction interaction between InsertMode
and InsertUtil (in particular how it affects repeat and delete which
crosses start).  Temporarily disabled the tests.  Next check-in will be
re-enabling them and fixing the interaction
Minor test reorg
Couple more unit tests
Couple more unit tests

Experimentally found some more interesting cases around typing 'sts' and
'backspace'.  In particular

- typing <Space> will disable 'sts' for the current line edit
- typing <CR> does not change the start point of an edit
Fix the handling of 'backspace' and start option

This fixes the handling of the 'backspace' setting and the start option.

Unfortunately though this revealed a flaw in our edit repeat
architecture.  The edit repeat code depends on translating InsertCommand
operations into flat TextChange values.  In general this works fine but
not for backspace repeats.  The reason is that backspace actively
reexamines the 'backspace' setting every time it runs.  Hence the repeat
can't be flat text change, it's a semantic operation.  For now disabled
the involved tests, need to rethink this feature in light of the new
data.
Renamed to InsertStartPoint

InsertStartPoint is a more descriptive moniker for this property as it
is only used this way.  First step to getting the space + tab typing
fixes in
Typing space now properly disables 'softtabstop'

At this point 'softtabstop' itself is a complete feature.  There are
some issues with repeat but they are actually more fundamental problems
with our repeat architecture.  The repeat code needs to be overhauled to
some degree in order to play nicely with 'softtabstop'.
Made BackspaceCommand private
Update InsertCommand

Change InsertCommand so that it is more easily and efficiently combined
when it only involves raw text changes.  First step to moving to
InsertCommand as a repeat infrastructure
More efficient combined edit command creation
Removed unneeded InsertTextChange property
Repeat now correctly using combined commands
Skipped the one failing test
Fixed repeat of backspace

The backspace command now properly checks the start option in the
backspace setting.  This required us defining the value of the insert
start point when not in insert mode.  There is no documentation for this
but it appears to be the caret point experimentally.
Fixed virtual space processing

VsVim now properly treats a blank line + virtual space as the vim
equivalent of autoindent.  A backspace which shouldn't delete the spaces
will no longer cause a buffer edit that inserts spaces.