Add useful query parameters to filter lists of repositories.

This adds a handful of query parameters for filtering lists of
repositories by various criteria. This allow filtering by name,
path OR mirror path, name OR path OR mirror path, tool name, hosting
service ID, repository username OR hosting service username.

Each of these supports a comma-separated list of values, which work as
an OR.

We'll be able to use this in RBTools to make repository lookups faster.
Fix links for file attachment URLs on CDNs in e-mails.

File attachment URLs on CDNs weren't showing up correctly in e-mails. We
were prepending the http(s)://domain to them, which was a problem when
that was already included in the URL. We now guarantee that
FileAttachment.get_absolute_url will return an actual absolute URL,
domain included, and it will only prepend the http(s)://domain if it's
not already there.
Fix a couple errors with adding GitHub repositories.

The introduction of HostingServiceError broke InvalidPlanError's
constructor chaining, leading to bad error messages. This was found
because of a larger problem, which was that some new restructuring
prevented 'plan' from being set. GitHub depends on this, and was
throwing an error when it was passed None.
Filter out users not on the LocalSite when sending e-mails.

Users who were previously listed as a reviewer on a review request
belonging to a LocalSite, or participated in the discussion, would
continue to receive e-mails related to the review request after removed
from the LocalSite. This isn't ideal, as they shouldn't have had any
access once removed.

We now filter out these users when sending an e-mail. Both the
target_people list and the review participants are considered when
filtering.
Add support for publicly-accessible LocalSites.

LocalSites have always been locked down to members of the groups, but
there are advantages to allowing for anonymous access when simply used
for partitioning of a server by teams/organizations.

This adds a public flag to LocalSite. If set, non-members will be able
to access anything that's considered public within the LocalSite. This
essentially gives it the same behavior as a standard site.
Add support for GitLab as a hosting service.

This adds support for the GitLab code hosting service. This is an open
source alternative to GitHub that supports Git repositories, issue
tracking, and more.

GitLab support takes advantage of plans. There are only two: "personal"
and "group".

The GitLab API, while mostly straight-forward, has some quirks. One of
those quirks essentially prevents us from supporting more than 100
repositories in an install (as lookups will fail). This hopefully won't
impact most people.
Re-enable an important optimization in the Myers diff algorithm.

There's an optimization we turned off many years ago in MyersDiffer
that results in excessively long diff times for very large files. This
was the source of some huge CPU spikes and memory usage, especially if
users dogpiled on the review request.

We turned this off in the early days of Review Board, and the commit
message was vague about why. It seems that it resulted in a breakage
with some diffs. I have not been able to reproduce this, and this part
of the algorithm matches GNU diff's perfectly. I know we've made other
fixes to the differ since then, so most likely, the breakage was due to
one of those.

To ensure compatibility with older diffs, I've bumped the diff compat
version. If it turns out that this does break things, we can easily
revert it, and test manually with any diffs by setting the stored compat
version in the database per-diffset.

This gets some large, more insane diffs from 1-2 minutes down to around
10 seconds.
Fix issues with Git defaults and SVN file access for Beanstalk.

There were a couple Beanstalk-related issues that were hit in the wild.

The first is that the default repository path for Git repositories was
wrong. People generally didn't notice due to the REPOSITORY= entry in
.reviewboardrc, and since we don't actually use it for anything but
path-based matching.

The second, and more important, is that Subversion flat-out didn't work.
It was using the Beanstalk blob API, which throws an HTTP 500 for
Subversion. I thought this had worked in the past, but it's possible it
regressed. Either way, simple change to make the blob API Git-only.

While at it, I also improved the speed of file checks by not passing any
?contents= to the URL unless we did want contents. It seems the API is
currently treating ?contents=0 the same as ?contents=1.
Release Review Board 1.7.21.