Restore caret position on undo / redo

This change will wrap the format operations inside of an
ITextUndoTransaction that tracks the caret position.  This will cause
the caret position to be consistent across Visual Studio undo / redo
operations.  Before the caret would jump wildly around because Visual
Studio made no attempt to track it and just picked a set offset in the
ITextBuffer.

Note that this will restore the caret position to the exact position it
was in before and after the format operation.  It is possible that for
format selection you may want to put the caret at the start of the
selection for undo.  If that is the case then you need to adjust the
caret to the start of the selection before calling
AddBeforeTextBufferUndoChangePrimitive.  There is no way to say "track
position X" instead it will just track wherever the caret is when this
call is made.

closes #44