Add __all__ to reviewboard.extensions.hooks.

The hooks module has a bunch of its own classes, but also imports some stuff
into its namespace (which is then expected to be exposed to the world). This
change adds __all__ to said module in order to clarify what should be exported
(which also makes pyflakes happier).

Testing done:
- Ran pyflakes
- Ran unit tests

Reviewed at https://reviews.reviewboard.org/r/6389/
Merge branch 'release-2.0.x'
Add some features and UI polish for Webhooks.

Now that we have support for webhooks in Review Board, it's time to make
them completely awesome and flexible, without being annoyingly hard to
use.

Previously, our webhooks were global across repositories and were forced
into pre-built JSON payloads. This is pretty par-for-the-course for
webhook implementations, but a few implementations out there had some
nice features that were worth bringing in.

Now, webhooks can be tied to one or more repositories, can be set to
apply only for events not matching a repository (such as review requests
that are only used for file uploads), or can be set to always fire
regardless of whether there's a repository.

They can be set to output JSON, XML, or form data payloads (in which
case there will be a 'payload=<encoded form data>' sent to the server.

Payloads are also no longer limited to what we generate. Users can
toggle an option for specifying a custom payload, which gives them a
CodeMirror widget they can edit. This supports the Django template
format, allowing the use of template tags, with the original payload
provided as the variable context. Several scary tags (such as include,
load, etc.) are disabled, and RequestContext is not used, keeping this
safe.

The webhook UI has been updated to provide a bit more guidance,
especially with the new options.

There were a few changes under the hood as well. Instead of a
`X-ReviewBoard-Signature`, we now use the more standard
`X-Hub-Signature` (followed by GitHub and others). We also provide a
proper `User-Agent`.

Reviewed at https://reviews.reviewboard.org/r/6391/
Fix some issues with the default webhook signal handlers.

While testing webhooks, I hit a few issues with the current signal
handlers, which this change fixes.

First, there's no guarantee that ReviewRequest.publish will have a user
passed, so we can't rely on the user when we get the signal callback.
This is also true when a review request is reopened. Now, we default to
the review request submitter.

We were providing a 'close_type' field in the payload for the closed
handler of 'S' or 'D', which are internal states. We now pass
'submitted' or 'discarded' instead.

We also now use 'reply' instead of 'review' for reply payloads, to help
differentiate them. This leaves room for us to include a 'review' entry
as well, if we decide to.

Unit tests have been written for all the signal-based webhook
dispatchers to ensure they continue to work.

Reviewed at https://reviews.reviewboard.org/r/6392/
Add an is_enabled_for mechanism for NavigationBarHook.

This adds a way for NavigationBarHooks to be enabled/disabled per-user. This is
done by adding a new, optional is_enabled_for flag to the constructor, which is
a callable that returns either True or False.

Testing done:
- Ran unit tests.
- Used this in an extension.

Reviewed at https://reviews.reviewboard.org/r/6390/
Merge branch 'release-2.0.x'
Add the missing managers.py for the webhooks support.
Fix up password reset template to use modern CSRF protection.

Once upon a time, we rolled our own CSRF protection. This file was somehow
never updated for it, and still had a comment about what we should do when
moving to Django 1.2(!).

Testing done:
Went through complete password reset flow.

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