Support for applying End, Start and Line offset

This adds support for the end, start and line offset in ISearchService
itself.  It is still not connected 100% end to end because of some
incorrect data usage in the motion libraries.  Getting that working
should be a small change.

Also disabled all of the new tests that weren't passing.  This allows me
to have 100% test passing to prevent regressions while still labeling
the work remaining
End to End support

Search offsets are now working end to end in VsVim.  It is even usable
from the UI although there are some glitches in the display.  Still a
lot of cleanup and implementation work to go but this is a significant
milestone
Cleaned up some equality implementations

The core equality tests weren't actually testing properly for null in
IEquatable<T>.  Changed it to properly test for that and fix up the
places which weren't correctly doing it.

Also implemented IEquatable on SearchData.  This is used within several
discriminated unions which require equality.  This needs to be done by
value not by reference
Current search text now updates properly

The visual search text displayed in the command margin now updates
correctly again while typing all forms of search.  Instead of
reconstructing the value we are just displaying exactly what the user
typed in
Renamed to SearchOffsetData

No idea why I named the test SearchDataOffsetTest when the class is
SearchOffsetData.  Fixed that
Majority of tests now passing

This hooked up much of the remaining functionality and got the tests
working to verify it.  Still need to hookup the motion information
Search offset data hooked up to motion result

The search offset data is now being properly hooked up to the motion
information.  Now line offsets become linewise and end offsets become
inclusive motions.

At this point the search offsets are implemented.  Still some testing to
do to see if I missed any cases but should be ready to go here in just a
small bit
Backward search with offset fixes
Refactored SearchService

This moved SearchService from a type with essentially only static
methods to one with instance methods.  Originally the static methods
were used to make it harder to use mutable state in unsafe ways.  This
is a type designed to be used from multiple threads and I wanted to make
it hard to get at data incorrectly.

Unfortunately this was also making it very hard to make progress on the
type.  Caching results for instance was really difficult.  Hence I made
the move to instance methods again.  The single piece of unsafe state
(_vimRegexOptions) is cached at every API entry point and passed along
the method calls
Added caching support to ISearchService

It's very common in vim to search for the same term multiple times.
This comes from simple user interaction (start a search, backspace a
typo, then search forward again) and in features keying off the same
data.  Searching is expensive especially in large files hence it makes
sense to cache the results in a simple fashion.  This introduces a very
simple 10 entry wide cache for search terms.