Fix Mercurial's _set_summary() and _set_description()

I was experiencing exceptions when using `rbt diff --revision-range`:

Traceback (most recent call last):
  File "/Users/gps/src/firefox/obj-firefox.noindex/_virtualenv/bin/rbt", line 9, in <module>
    load_entry_point('RBTools==0.5.2.dev', 'console_scripts', 'rbt')()
  File "/Users/gps/src/rbtools/rbtools/commands/main.py", line 113, in main
    command.run_from_argv([RB_MAIN] + args)
  File "/Users/gps/src/rbtools/rbtools/commands/__init__.py", line 157, in run_from_argv
    exit_code = self.main(*args) or 0
  File "/Users/gps/src/rbtools/rbtools/commands/diff.py", line 95, in main
    files=args)
  File "/Users/gps/src/rbtools/rbtools/utils/diffs.py", line 13, in get_diff
    repository_info)
  File "/Users/gps/src/rbtools/rbtools/clients/mercurial.py", line 388, in diff_between_revisions
    self._set_description(revision_range)
  File "/Users/gps/src/rbtools/rbtools/clients/mercurial.py", line 379, in _set_description
    if self.options.guess_description and not self.options.description:
AttributeError: Values instance has no attribute 'guess_description'

This patch makes the exceptions go away.

Reviewed at https://reviews.reviewboard.org/r/5063/
Support hidden changesets in Mercurial

Before this patch, if hidden changesets were specified (e.g. with
--revision-range), rbtools would fail because Mercurial would complain
about changesets not being found. Mercurial "pretends" it doesn't know
about hidden changesets unless --hidden is specified.

This patch adds --hidden to all Mercurial commands that could interact
with hidden changesets. If the current Mercurial install doesn't support
hidden changesets (this is detected at run time), this argument is
stripped before command execution.

An alternative to this implementation would require the user to pass
--hidden to rbtools or would require the user to activate hidden
changeset support in the rbtools config. It is the opinion of this patch
author that things should "just work" and the user shouldn't be required
to do anything special to get rbtools to play nice with hidden
changesets.

Testing Done:
Manually testing diff --revision-range with hidden changesets.

Reviewed at https://reviews.reviewboard.org/r/5064/
Support of Perforce Brokers

Modification of Perforce client to support Perforce brokers. First check if the
P4 Info has a Broker address defined .. if so use the broker, otherwise (as
before) check the Server address.

Testing Done:
Been using this mod for over a year at Cadence on RBTools 0.5.1

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

Fixes bug 2568.
Enable loading of hgrc files and normalize diff settings

Not loading hgrc files (the prior behavior) was wrong because hgrc files
could provide desired or even required functionality.

The reason why hgrc files weren't loaded was concerns over consistent
command output, mainly for `hg diff`. These concerns have been addressed
in the form of a custom Mercurial extension that resets diff settings at
run-time.

Fixes bug #3034
Reviewed at https://reviews.reviewboard.org/r/5065/
Add Gregory Szorc to the authors list.
Fix the authentication prompt appearing multiple times.

The recent change to reorganize how login works (9ab0cac0) actually
broke authentication a bit. RBTools would always prompt at least twice
for a password. This was due to the logic being incomplete and not
actually making use of the new parameters passed in.

This completes that change by adding those parameters instead of trying
for options.username and options.password.
Fix some alignment.

The plastic implementation had some lines with an extra indent. Trivial change.
Merge branch 'master' into release-0.5.x
Add support for 2 factor authentication when logging in.

RBCommons will soon be getting 2 factor auth support, and this will
likely trickle down into Review Board at some point once things
stabilize. This change adds support for this when logging into RBTools.

After attempting to log in, the server may respond with an
X-ReviewBoard-OTP header. This is actually quite similar to the
X-GitHub-OTP header that GitHub uses. It indicates that a One-Time
Password is required, and what method the user is expected to use to
receive it. They are then prompted for that password. Once entering it,
RBTools will proceed as before, getting a cookie and using it for future
requests.
Change 'check_install' to take an list of parameters instead of a string.

The 'check_install' method is used to check to see if various command-line
tools we use are present. This method used to take a string and split it on
spaces to get a list of parameters. This seemed an ugly and error-prone way of
breaking things up, so I've changed it to take in a list of parameters instead,
which are passed directly into Popen.

Testing done:
* Ran unit tests.
* Smoke tested rbt.

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