Add support for Team Foundation Server repositories.

This change adds a new client for TFS (TFVC). It relies on the presence of the
'tf' command-line tool, which is available either as part of Visual Studio (on
Windows) or via the "Team Explorer Everywhere" package (which is a java
application that can run on just about any platform).

This is intended for use with the TFS SCMTool which is being developed as part
of the Power Pack.

Diffing is done basically by hand, because the 'tf diff[erence]' command is
kind of crummy, even when calling out to GNU Diff via the TF_DIFF_COMMAND
environment variable. In particular, when there are added/deleted files, rather
than including the diff for that file, it just says something like "X is only
present in revision Y". The diffing logic matches that which is used for the
post-commit implementation in the TFS SCMTool.

At the moment, this only supports posting pending changes from the working
directory. There's the beginning of an implementation for committed change
ranges, but when there are moved files, there's no way to match up the orig
file (delete) from the new file (add). I do intend to have it try its best to
post and only give up if a changeset includes more than one moved file, but
that will come later. For now, committed changes can be posted via the web UI.

Testing done:
- Posted review requests that had edited files, added files, deleted files,
  renamed files, and moved+edited files.
- Verified that binary files were shown correctly.
- Ran unit tests.

Reviewed at https://reviews.reviewboard.org/r/6646/