Break the "Extending Review Board" document into several pieces.

Having the entire extensions documentation in one big page was getting
unwieldy, and as soon as I started trying to add more information on hooks, it
became impossible to keep track of everything.

This change breaks it out into four inter-linked pages:
- Overview
- Extension Hooks
- Review UI Integration
- Extension Distribution

Testing done:
Built HTML docs and read through everything to verify that the organization
made sense, and checked for broken/nonsensical links.

Reviewed at https://reviews.reviewboard.org/r/4730/
Catch various SCMErrors in the ValidateDiffResource

The diff validation was catching a variety of errors, but the scmtools errors
weren't part of that. This wasn't an issue when I first wrote it but subsequent
clean-up has changed that. I've added handling for the ShortSHA1Error specifically
(to make it match what the front-end code expects), and a generic catch-all for
SCMError.

Testing done: Ran unit tests.
Reviewed at https://reviews.reviewboard.org/r/4741/
Protect against comment objects without reviews when loading a review UI.

Somehow, in my database I ended up with comments that were not
associated with a Review. While this is unlikely in production, it's
good to check for this, as it'll otherwise result in a confusing
JavaScript syntax error when rendering the template.

Now, when loading comments, we catch exceptions when attempting to get
the review, and ignore the comment.
Add support for JavaScript-side extensions to Review Board.

A Review Board extension can now define a JavaScript counterpart that
can plug into hooks in JavaScript, in order to augment functionality.

Previously, an extension would have to define a TemplateHook with a
script to load, which would then have to monkey-patch its way into
things. We're moving beyond that now to provide a solid way of hooking
in.
Add extensibility to the comment dialog.

The comment dialog is now extensible through a CommentDialogHook. Such
hooks provide a view that will essentially layer onto the CommentDialog
and can manipulate or listen to it or its associated CommentEditor.

Some of the internals of CommentDialog have been made public for use by
extensions.

Right now, hooks can manipulate the buttons and trigger operations such
as saving. Later, we'll probably want to allow it to add additional
fields.
Add a hook for displaying extra comment information for reviews.

This introduces a new hook, CommentDetailDisplayHook, which can be used
to display additional data in reviews and in e-mails (both HTML and
plain text). An extension can use this to show information such as, say,
the severity of a comment.

This does not provide the ability to display in the review dialog, as
that's generated in JavaScript entirely. That will be added in a future
change.