SVN and CVS no longer create diffs relative to current working directory.

CVS and SVN now change to the root directory of the repository for performing
diffs (before changing back).

Add the `_get_repository_root` method to `CVSClient` that determines the root
directory of the current CVS repository. It does this by reading the
CVS/Repository file in the current directory and determining the working
direcotry's depth relative to the CVSRoot; that is the number of directories to
traverse up to find the repository root.

The `base_dir` parameter of all `rbtools.utils.diffs` method is no longer
optional because all SCMTools that utilize it require specifying the root of
the repository.

Testing Done:
Unit tests pass.
The diffs are generated correctly.

Reviewed at https://reviews.reviewboard.org/r/6388/
Merge branch 'release-0.6.x'
Git client: properly handle deleted files when making SVN-compatible diff

When deleting a file, git-diff outputs "+++ /dev/null" and "deleted file mode",
neither of which are understood by SVN. Rather, SVN expects the new filename to
be the same as the deleted one. This is important when doing file renames or
deletions when using git-svn.

Testing Done:
Successfully used this code to post a review for a basic set of file renames
(~10 files). Posted to RB 1.6 and it seemed to be happy.

Reviewed at https://reviews.reviewboard.org/r/6396/
Merge branch 'release-0.6.x'
Fix GIT_USE_EXT_DIFF.

The code to enable-disable external diff programs for git wasn't quite right,
in that it worked as intended if the config parameter was not present, but if
it was, the value was backwards.

Testing done:
Set my diff viewer to an external program and verified that the setting now
worked as intended.

Reviewed at https://reviews.reviewboard.org/r/6417/
Merge branch 'release-0.6.x'
Provide a better error message when hg upstream is empty.

Running `rbt post` or `rbt diff` will now print an error message that explains
that it expects the upstream repository not to be empty. The old behaviour was
to print out a cryptic error message (`CRITICAL: list index out of range`).
This new behaviour indicates the source of the underlying problem.

Testing Done:
Tested `rbt diff` with an empty Mercurial upstream repository. It now prints
the correct error message instead of the cryptic one.

Bugs closed: 3565

Reviewed at https://reviews.reviewboard.org/r/6428/
Merge branch 'release-0.6.x'
`rbt post` command uses API's DiffValidation endpoint before upload

Before updating a review request or creating a new one, `rbt post` command
validates the diff file and terminates if it does not pass validation. This
prevents the command from creating empty review requests when the supplied diff
file is invalid.

Testing Done:
Tested `rbt post` with:
1. Empty diff (error 219)
2. Diff from a different repository (error 207)
3. Non-diff file as a diff (error 224)
4. Valid diff (success)

using:
1. Git
2. Mercurial

Also tested `base_dir` with a subversion reporitory.

Fixes bug 2733.

Reviewed at https://reviews.reviewboard.org/r/6407/
Merge branch 'release-0.6.x'