Improve testing infrastructure reusability for the web API.

The testing infrastructure was fine for the Review Board API tests, but
wasn't as nice to work with for anything else that wanted to reuse the
test infrastructure. In particular, the assumption was made that all
APIs can be bound to a Local Site, but this isn't always true.

This assumption has been removed. The default is still to test APIs
against a Local Site, but by setting `test_local_sites = False`, this
will be turned off.

Along with this, create_repository() can now accept a `local_site=`
parameter, and subclasses of BaseWebAPITestCase can now override the
mimetype for expected errors.
Pass **kwargs to get_href_parent_ids in WebAPIResource.

This is a trivial counterpart to a new change in Djblets for passing the
list of keyword arguments to get_href_parent_ids. This allows subclasses
to have more information when overriding this function.
Allow overriding of the ID attribute in JavaScript API resource URLs.

When computing the URL of a resource, we assumed the object's standard
ID was used to represent that resource in the URL. This isn't always the
case, such as for users and groups.

Resources can now set 'urlIDAttr' to a value representing the attribute
that contains the ID used for the URL.
Switch the My Account page to use the new Djblets Config Forms code.

This places the My Account page classes on top of the Config Forms
codebase. Config Forms takes care of all the actual rendering and
management of pages. The My Account classes handle the registration and
additional work needed by the page. No functionality or presentation
has changed.
Fix one more unicode issue in diffs.

Most of our unicode issues have been fixed, but there was one lingering in the
interdiff code. Trivial fix.

Fixes bug 3291.
Fix some bugs with post-commit creation with subvertpy.

The subvertpy backend for post-commit review request creation had a bug where
it was passing in a string for the base revision to the diff method. This is
fixed easily enough by ensuring that revisions are ints.

While I was doing this, I found that trying to create post-commit review
requests for commits which are in a protected part of the repository (such as
security fixes in the ASF repo) would show the user a dialog that says "HTTP
Error 500". I've converted exceptions in the diff method to SCMError, which
will at least log and return something slightly less ugly to the user.

Testing done:
Created some post-commit review requests for commits in the WordPress and ASF
repositories.

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