Add a field on Repository for storing a UUID for incoming webhooks.

This adds new Repository.hooks_uuid, which is used for matching and
validating incoming webhooks. How this is used is up to the hook
implementation, and can be part of the URL, part of HMAC validation,
or whatever else makes sense.

This field is not exposed in the API. It will instead be used by the
various HostingServices in whichever way makes the most sense for their
implementation, and exposed to the user through an upcoming change that
will allow them to provide hook instructions.

Reviewed at https://reviews.reviewboard.org/r/6310/
Add better validation of incoming webhooks for GitHub.

Incoming GitHub webhook requests for the close-submitted webhooks are
now safe from unintentional requests (for incompatible events) or
malicious payloads (from people guessing the URL and sending payloads to
close various review requests).

We now require that the webhook on GitHub be configured with the Secret
field filled out. It must be set to the value of the repository's
hooks_uuid field. The incoming payload will then be validated for a
signature generated with those payload contents and that secret.

The handler will also filter out non-push events, in case the webhook
was configured to "send everything."

This change (and the upcoming ones for Bitbucket and Google Code) do
break backwards-compatibility for existing hooks, but this is necessary
(and we have labeled this an experimental feature).

An upcoming change will assist users in filling out the webhook field
information, along with the value for the Secret field.

Reviewed at https://reviews.reviewboard.org/r/6313/
Add customized instructions for configuring webhooks for repositories.

HostingService subclasses can now provide a set of instructions for
configuring any incoming webhooks that their repositories support. This
is done by setting `has_repository_hook_instructions = True` on the
subclass and then overriding `get_repository_hook_instructions()`.

Any repositories whose HostingServices support hook instructions will
have a "[Hooks]" link in the repository list page in the admin UI.
Clicking this will pop up a modal dialog with the instructions.

Currently, this is only implemented for GitHub. The GitHub instructions
explain the close-submitted webhook, provide examples, link to the page
for adding a new webhook for that repository, and provide all the fields
to fill in.

The other supported services will come soon.

Reviewed at https://reviews.reviewboard.org/r/6314/
Merge branch 'release-2.0.x'