Fix two bad calls to save with update_fields.

The recent improvements to the review request draft save logic resulted
in a bad attempt to pass update_fields. The '=' was missing, resulting
in update_fields being treated like a dictionary, which didn't exist.

This fixes the two calls to properly save with update_fields.
Allow access to public Local Sites by anonymous users.

Local Sites were recently given a flag to control whether they could be
publicly accessed. This still required the user to be logged in, though.

This change allows access to public Local Sites by anonymous users, when
anonymous access is turned on for the installation.

A large part of this change is just cleaning up reviews/views.py. Nearly
all the functions either did their own LocalSite checks or assumed
_find_review_request would do it. We now consolidate the logic in a
decorator.

The new logic works like this:

* If the user is anonymous, and the site is private, they will get
  redirected to the Login page.

* If the user is anonymous, and the site is public, they will be able
  to access the page's view (which still may deny them for other
  reasons, of course).

* If the user is logged in, and the site is private, and they don't
  have access, they will get a Permission Denied error.

* If the user is logged in, and the site is public, they will be able
  to access the page's view.

There's also a better experience for the dashboard. Now, whether using
LocalSites or not, anonymous users will get redirected to the All Review
Requests page instead of the Dashboard by default. Either page will then
be able to do their own checks, showing a Permission Denied or login box
as appropriate, given the settings.
Redo the review request ID column to fix breakages.

The new registration system for datagrid columns in Djblets was
incompatible with the way that the review_id column works for the
dashboard. This column was being overwritten in __init__, which meant
that it skipped registration. The original column had no way of grabbing
the right field itself, resulting in a breakage.

The hack is now gone, and a dedicated column has been created for the
review request ID. I've also shortened the label and made it more clear
this is about review request IDs, not review IDs.
Merge branch 'release-1.7.x'
Make JSExtension available through reviewboard.extensions.base.

This exposes JSExtension through reviewboard.extensions.base so that
extensions can make use of it.
Switch to using Extension.initialize in docs and examples.

Extension.initialize is a convenience around overriding
Extension.__init__, and we want to encourage its use. This updates our
docs and the extension generator's example output to use this instead.

There's also some improvements for the formatting of the generated
extension.py file, particularly when not showing a dashboard link.
Plus, an example metadata variable with Name and Summary.
Issue 3189: Add a link to the interdiff from the review request draft banner

Adds a link to the interdiff from the review request draft banner to make it
easier to see the change the draft contains.

Testing Done:
* Tested the change using a development review board with different drafts
  (with and without diffsets).
* Unit tests pass.

Bugs closed: 3189

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