Implement drag and drop on admin site (back end)

The user can now customize their dashboard by dragging and dropping widgets to
move them around.

Testing Done:
I opened Review Board on two different browsers, Chrome and Firefox, and logged
in as the same user on both browsers. On the Chrome browser, I visited the
admin dashboard and changed the ordering of the widgets with drag-and-drop. On
the Firefox browser, I also visited the admin dashboard, and I checked to make
sure that the positions of the widgets were the same on both browsers,
indicating that the positions had been saved on the back end side.

Reviewed at https://reviews.reviewboard.org/r/5528/
LDAP: Handle upgrades from 1.7.x

The new LDAP configuration is much better, but it broke when upgrading existing
configurations from 1.7.x. This change adds some migration for old settings.

Testing Done:
Configured LDAP with ReviewBoard 1.7.21, then upgraded to ReviewBoard 2.0rc1
with this patch.

Also tested manually editing the siteconfig_sitconfiguration database table to
verify that it was properly updated on ReviewBoard start-up.

Reviewed at https://reviews.reviewboard.org/r/5605/
Handle the inability to load the siteconfig better.

My changes to automatically apply https based on the siteconfig made the
experience a bit worse when there was a problem loading said siteconfig. The
major problem was that load_siteconfig() would return silently if there was
some unexpected error. This wasn't a huge issue before, but now that we have
middleware that needs the siteconfig to load, it was showing me at
AttributeError for NoneType.

I've added some logging to load_siteconfig, and changed the middleware to pass
through if it couldn't load.

Testing done:
Tried to run my devserver against a mysql server which wasn't running. Saw the
error in the log about loading siteconfig, and saw that instead of getting a
weird AttributeError in my browser, I saw an error about the sql server.

Reviewed at https://reviews.reviewboard.org/r/5604/
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.
Merge branch 'release-2.0.x'