Un-escape markdown text for 'rbt patch -c'

The patching step was including escaped characters in the description and
testing done, which was annoying to look at, and made it so in the case where
the first line of the description was the same as the summary except for
escaping, we wouldn't collapse them together.

This change adds some code to do the same as markdown_unscape() from
reviewboard.reviews.markdown_utils.

Testing done:
Ran `rbt patch -c` for a few changes on reviews.reviewboard.org that had
escaped descriptions and testing done. Saw the expected results.

Reviewed at https://reviews.reviewboard.org/r/5014/
Fix post -u bug that uses the incorrect summary.

Fix post -u bug that uses the incorrect summary.

If a draft exists for the review request, post -u should use the draft's
summary and description instead of the review request's summary and description
to detect and prompt for the review request to update. This patch fixes the
issue where post -u would always use the review request’s summary and
description even if a draft exists.

Testing done:
Tested with published and draft review requests.
Unit tests passed.

Reviewed at https://reviews.reviewboard.org/r/5041/
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.