Various fixes including performance-based optimizations to VFS SCM controller

1) Updated Mediatype mapping to to use System.Web.Mimemapping instead of the Windows registry. This makes the resulting mediatype consistent with other uses in System.Web and avoids looking at the registry.

2) Expand error message if we can't write to file system. Now we pass back the exception message (not the details) so that the caller has a better idea about what is going on.

3) Added tracer timer to git commands to get a better understanding of where time is going.

4) It turns out that "rebase" is very expensive so we now only use it when necessary. This shaves around 2 secs of each SCM VFS operation.

5) Avoided unnecessary calls to git in VFS SCM by reusing commit id

6) Avoid having "deploy" do a forced "get" in VFS SCM as we already know that the repo is up to date. This shaves 0.5 secs of each SCM VFS operation.

7) Added "nodeploy" and "message" query options to SCM VFS that enables us to add files without deploying and to customize the commit message.

8) Replaced ProgressWriter implementation with one that doesn't fire up a new thread. The overhead of the old implementation was 250 ms per operation (not just SCM VFS). Now there is no longer any measurable overhead.

9) Removed the exponential backoff and instead moved to an async lock model which is much more efficient and general purpose.

10) Addressed code review comments