Fixed the styling of the admin login page.

The admin login page had no margin above it. This changes it to include
the admin CSS and to fix up the styles to take up the full width of the
page, in order to match the main login page.
Document how to integrate Review UIs through Extensions.

This is a how-to guide for creating and integrating new Review UIs
using Extensions.

This was written by Sampson Chen, with a few small tweaks by Christian
Hammond for better syntax highlighting, whitespace removal, and minor
code changes.

Reviewed at http://reviews.reviewboard.org/r/3596/
Provide a nicer selector for cache backends compatible with settings.CACHES.

The cache backend selector in General Settings is now much nicer,
providing a dropdown of possible cache types and an appropriate field
for entering the hosts or cache location.

Two entries are provided by default: Memcached and File cache.

If running with DEBUG = True, then "Local memory cache" will also be
available, making it easier to test and debug things.

If some other cache backend is used, then "Custom" will be an option as
well, and will leave the cache settings untouched.

This moves us away fully from the old Django CACHE_BACKEND setting.
Fix regression in linkify js, that is causing certain URLs to be wrongly stripped

28878fc ( http://reviews.reviewboard.org/r/3374/ ) has introduced a regression
in reviewboard URL matching inside review descriptions.

URLs like this (spaces added so this doesn't get stripped):
    http://foo.com/?param1=foo & param2=bar

are currently wrongly converted to:
    http://foo.com/?param1=foo&
(and last GET parameter is stripped)

I think this was an unintentional change (accidentally stripping the $ sign at
the end of the regexp). Bonus: whitespace fix.

Testing done:
Put the following urls in change description:
http://foo.com/?param1=foo & param2=bar
http://foo.com/?param1=foo&param2=bar()
(http://foo.com/?param1=foo&param2=bar)

- blah blah (http://www.foo.com/)
- http://download.oracle.com/javase/1.4.2/docs/api/java/lang/Object.html#clone()
- http://download.oracle.com/javase/1.4.2/docs/api/java/lang/Object.html#equals(java.lang.Object)
- gwegdss http://www.foo.com/

Reviewed at http://reviews.reviewboard.org/r/3615/
Show draft captions in file attachment review UIs.

When an image (or other reviewable attachment) had a draft caption, it wouldn't
be shown in the review UI header. Fixing this was a pretty simple addition of
the same fallback logic that we use elsewhere.

Testing done:
Set a draft caption on an image attachment and loaded the review UI.

Reviewed at http://reviews.reviewboard.org/r/3606/
Merge branch 'release-1.7.x'
Allow ReviewUI Integration through ReviewBoard Extensions.

There's now a ReviewUIHook that extensions can use to register review
UIs for different types of file attachments. This handles registering
and unregistering the UIs.

Reviewed at http://reviews.reviewboard.org/r/3565/
Introducing Thumbnail Integration through Extensions.

ReviewBoard Extensions can now define how to create thumbnails
for specified file attachment mimetypes.

Added FileAttachmentThumbnailHook to generalize a hook point for all files of
all mimetypes. Mimetype Handlers for text-based mimetypes can leverage
`reviewboard.attachments.mimetypes.TextMimetype` by simply overriding
`_generate_preview_html` to define how to generate the HTML used in the
thumbnail, instead of having to redefine `get_thumbnail`.

Testing done:
- Disabled the registration of XMLMimetype in reviewboard.attachments.__init__
- Verified that XML thumbnails now fall back to raw uncolored text
- Copied over the XMLReviewUIExtension from the sample extension branch, and:
- Added XMLThumbnail.py to define the XMLMimetype class for generating XML
  thumbnails
- Modified extensions.py to use the FileAttachmentThumbnailHook to hook
  XMLMimetype into ReviewBoard to handle XML thumbnails.
- Verified that the Extension installs without error
- Verified that Extension-installed XML thumbnails feature work exactly as
  did before.

Reviewed at http://reviews.reviewboard.org/r/3614/
Administrators can associate server SSH key from the Repository form

Administrator(s) of a Review Board instance are given the option to
automatically associate the instance's SSH key with new/existing repositories,
if supported by the hosting service, from the Repository form.

Manually ensured key association completed under the conditions required for
existing repositories:
- Created new repository using hosting service that supports SSH key
  association (GitHub).
- After repository created, edited repository, checking associate SSH key
  form field.
- Confirmed key uploaded to GitHub

Manually ensured key association completed under the following conditions for
new repositories:
- From the admin, added new repository, using GitHub as the hosting service,
  and setting the "Associate SSH key" field.
- Confirmed key uploaded to GitHub

Manually confirmed that correct error message returned when key association
failed. Confirmed that key association not attempted when the form already
contained errors.

Reviewed at http://reviews.reviewboard.org/r/3488/
Revert "Administrators can associate server SSH key from the Repository form"

Christian tells me that we don't want this in 1.7 yet. This reverts commit
0f0c5c346f5e92ded668a1800fbb2b0f0e11d3bf.
Merge branch 'release-1.7.x'
Administrators can associate server SSH key from the Repository form

Administrator(s) of a Review Board instance are given the option to
automatically associate the instance's SSH key with new/existing repositories,
if supported by the hosting service, from the Repository form.

Manually ensured key association completed under the conditions required for
existing repositories:
- Created new repository using hosting service that supports SSH key
  association (GitHub).
- After repository created, edited repository, checking associate SSH key
  form field.
- Confirmed key uploaded to GitHub

Manually ensured key association completed under the following conditions for
new repositories:
- From the admin, added new repository, using GitHub as the hosting service,
  and setting the "Associate SSH key" field.
- Confirmed key uploaded to GitHub

Manually confirmed that correct error message returned when key association
failed. Confirmed that key association not attempted when the form already
contained errors.

Reviewed at http://reviews.reviewboard.org/r/3488/
Require the Djblets 0.7.6 dev installs.

This should help prevent issues accidentally grabbing a released
package.
Merge branch 'release-1.7.x'