Add extra context for added and deleted empty files.

Review Board could not handle added or deleted empty files in SVN, Mercurial,
and Perforce diffs since the diff output from `svn diff`/`hg diff` did not
provide enough context on empty files. This change adds extra processing in
RBTools to generate a diff with extra information on any added or deleted empty
files, if the Review Board server has the `empty_files` capability for the SCM
tool in question.

The original SVN diff output of an added/deleted empty file was:
```diff
Index: foo
===================================================================
```

After this change, the SVN diff of an added empty file becomes:
```diff
Index: foo\t(added)
===================================================================
--- foo\t(<base_revision>)
+++ foo\t(<tip_revision>)
```

For Mercurial, the diff of an added empty file is now:
```diff
diff -r <base_revision> -r <tip_revision> foo
--- /dev/null\tThu Jan 01 00:00:00 1970 +0000
+++ b/foo\t<date>
```

For Perforce, the diff of an added empty file is:
```diff
==== //depot/foo#0 ==A== //depot/foo ====
```

Testing Done:
Ran `rbt post` on a RB server with the `empty_files` capabilities with different
SVN, Mercurial, and Perforce diffs, and verified that the modified diffs were
as expected:
- Diff with 1 added empty file
- Diff with 1 added empty file, 1 added non-empty file
- Diff with 1 deleted empty file
- Diff with 1 deleted empty file, 1 deleted non-empty file
- Diff with 1 added empty file, 1 deleted empty file
- Diff with 1 added empty file, 1 added non-empty file, 1 deleted empty file,
  1 deleted non-empty file, 1 modified file

Ran `rbt post` on a RB server without the `empty_files` capabilities, and
verified that the generated diffs did not include any extra information on
added/deleted empty files. These added/deleted empty files were not included in
the review requests.

Ran unit tests. More testing was done in /r/5785 as well.

Reviewed at https://reviews.reviewboard.org/r/5802/
Fix error running 'rbt patch' with Mercurial repositories.

Running `rbt patch` with a Mercurial repository failed with the error "patch:
unrecognized option '--config'" because _execute() in
rbtools/clients/mercurial.py appends a --config option for loading hgrc files.
This option is used for hg commands, but is not a valid option for `patch`. To
fix this, we run `patch` by calling execute().

Testing Done:
- Ran unit tests.
- Ran `rbt patch` with a Mercurial repository, and saw that the patch was
  applied successfully.

Reviewed at https://reviews.reviewboard.org/r/5894/
Don't error out if receiving an unexpected line in 'svn status'.

When 'svn status', we'd attempt to look for particular data to indicate
whether there's any files scheduled to retain history in the commit. We
assumed there would be a 4th column to check, but this doesn't always
appear to be the case. We now catch any IndexErrors here and ignore
them.

Reviewed at https://reviews.reviewboard.org/r/5925/
Make rbt behave better if it can't find a remote branch for hg repositories.

Right now, if rbt can't find the remote branch, it errors out with the string
"CRITICAL: tuple index out of range". This is a terrible error.

There's some code in the mercurial client to allow using --tracking-branch (or
the associated config value) in the case that none of the expected branch names
are found, but --tracking-branch was listed under the "git options" only. I've
moved this option to the general repository options section and clarified how
it behaves for mercurial repositories.

I've then made it so that if the mercurial client can't find an upstream
branch, it will error out with a useful message telling people what went wrong
and how to fix it.

Testing done:
* Ran unit tests
* Created a bare hg repo with no remote branches, and ran 'rbt post'. Saw the
  expected error message about being unable to determine the upstream branch.

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