Speed up the creation and publishing of drafts.

This massively reduces the number and complexity of queries needed to
both create review request drafts and to publish them. This code was old
and predated things like the F() queries and update_fields=. It also
took an ignorant approach to updating lists of ManyToManyFields.

We now make use of all three approaches to substantially reduce the
number of queries we have to perform, and to keep those queries simpler.

While in there, I also fixed copying over extra_data into the draft,
which was missing before.
Add hooks for creating account pages and forms.

This introduces AccountPagesHook and AccountPageFormsHook, which allow
extensions to add to the My Account page. It also provides documentation
on using them.

While implementing an extension, I decided to change some of the naming.
reviewboard.accounts.forms.account is now
reviewboard.accounts.forms.pages, which helps tie the forms to the pages
reviewboard.accounts.pagemodule, and removes the double "account."
I also renamed AccountForm to AccountPageForm.
Separate storing commit IDs and updating from them.

Review requests previously stored commit IDs and allowed setting them
during creation with the assumption being that they were intended for
setting the review request information and diff.

This change removes that assumption. Commit IDs can now be set on new
review requests or updated later on drafts. The old behavior is invoked
by passing a commit_id in the request along with create_from_commit_id=1
or update_from_commit_id=1 (depending on the operation). For
compatibility reasons, setting changenum will automatically trigger the
old behavior as well.

Since commit IDs are now stored along with drafts, we now record them in
change descriptions as well. Some changes needed to be made to field
recording logic for this. I also split up the existing CommitField
into ChangeField and CommitField in order to better separate out
responsibilities and provide a more appropriate label depending on
whether Perforce-style changesets are used vs. commit IDs.

This does remove the ability to update based on a commit ID using
HTTP PUT on the review request item resource, in favor of the draft API.
Show indentation changes in diffs.

We've always by default turned off showing inserts/deletes for lines
that only had indentation changes. This could make it hard to see that
those lines actually did change indentation, though.

We now show indentation marks to help indicate this. For indented lines,
a faint green series of ">" characters or "------>|" strings are used on
the right-hand side of the diff to show indentation. If a line
unindents, then faint red "<" characters or "|<------" strings are shown
on the left.

Sections of an equals block with indentation are treated like any other
modified section. They will always show up and won't be hidden under
collapsed sections.

In order to ensure indentation-only changes to files were shown, I had
to remove the logic in diff_file_fragment.html that determines if we
should show the fragment. We were only showing the table if we had
changed chunks or under other special conditions (such as binary files).
In practice, this logic wasn't great anyway, and ended up showing a
single line of border and shadow for such changes. We already had a
condition that showed "No changes were made to this file," which is a
better thing to show.
Split up the extension hooks docs, and modernize them.

Now that we have a lot more extension hooks, it's time to split up the
docs. The existing page was getting too big and hard to maintain,
especially as we go into more details on hooks.

Each hook now has its own page (with the exception of the ActionHooks,
which have one page for all three hooks, which are all basically the
same).

Some of the content was tweaked just a bit. Some formatting errors were
corrected. The extension examples were fleshed out to include imports
and the new initialize() method. The Template Hook docs now have the
rest of the template hook names. Small things like that. Otherwise, the
content is basically the same.
Fix a couple bad imports from my account page hooks change.

I had some stale *.pyc files that were allowing some bad imports to
succeed. Once removed, the imports failed. This fixes the imports.
Rename the docs .txt files to .rst.

This renames all our docs to .rst, which will give us
syntax-highlighting during code review, and allow us to remove the vim
syntax markers.
Strip out the vim formatting markers in the docs.

Now that we have .rst files, we no longer need the vim markers that tell
vim what format the files are.

This is being done separately from the rename change so that git doesn't
get confused and lose the rename information.
Issue 3200: "Depends on" field now uses strikethrough for submitted dependencies.

The "Depends on" field is used to indicate when one change depends on another.
It would be very useful if it could react when those dependencies are marked as
submitted by setting a strikethrough on the text. That way, users don't have to
click through to see whether or not the dependent change has been committed
yet.

Testing Done:
Manual testing: marked a dependency submitted, observed it show up with a
linethrough in the "Depends On" list for another review. All tests in djblets
and reviewboard pass.

Bugs closed: 3200

Reviewed at https://reviews.reviewboard.org/r/5348/