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
Print attributes on union cases

Fix #64
Keep named patterns on explicit constructors

Fix #46
Use verbatim strings in paths of #r and #I directives

Fix #34
Add a unit test for issue #49

Closes #49
Merge pull request #65 from jaredpar/fixes-caret-undo-redo

Restore caret position on undo / redo
Fixed querying of ITextDocument

The IsSignatureFile method was incorrectly querying for the
ITextDocument related to a given ITextBuffer.  The main problem is there
is no guarantee that an ITextBuffer has an associated ITextDocument
value.  For the most part ITextDocument represents physical files on the
disk while ITextBuffer represents something being editted in Visual
Studio.  Most things being edited in Visual Studio have a backing
physical file but not everything.  When this method was called on such a
file it would result in an exception.

A secondary minor issue is the proper way to query for ITextDocument is
to use ITextDocumentFactoryService.TryGetTextDocument.  Even though they
are very unlikely to ever change this, the use of typeof(ITextDocument)
as the key to the property bag is not a supported operation.
TryGetTextDocument also handles some extreme corner cases (like a
disposed ITextDocument).   It's just a safer API to use.
Merge pull request #67 from jaredpar/fixes-textdocument

Fixed querying of ITextDocument
[VS] Simplify implementation of GetAllText

As per discussion at
https://github.com/dungpa/fantomas/commit/7d80e1d6a768fa0fcc24f1d470a5d5eafa47e25f#commitcomment-3576093
Update projects to use FSharp.Compiler.Editor package
Remove unused lib folder and update scripts
Fixes #71 (WIP)