Connect widget signals during RB initialization instead of module load.

reviewboard/admin/__init__.py was connecting to save/delete signals for
Repository and Group in order to invalidate widget caches, in order to
keep the dashboard up-to-date. However, doing it during module load
resulted in some circular import issues, which manifested in various
ways over time, but are now impacting the docs generation.

Now, the signal connections and invalidation live solely in widgets.py,
in an init_widgets() function.

The top-level reviewboard.admin module listens for Review Board's
'initializing' signal and, when called, it invokes the init_widgets().

This allows us to build docs again, and should resolve some of the other
cases we've seen over time.

Reviewed at https://reviews.reviewboard.org/r/6370/
Prevent users from publishing empty (no modifications made) review request drafts.

When a user submits an empty draft for a review request a warning is issued to
let them know they did not make any modifications.

The general flow is:
1. In the review_request_draft model determine if there were any changes to any
   of the fields, if not then raise a 'Not Modified' exception.
2. The review_request_draft controller/resource will catch the 'Not Modified'
   exception and return an appropriate error message to the Client JS to
   display a meaningful message to the user.
3. Client JS displays error message and the 'Publish Changes' and 'Discard
   Draft' buttons re-enable.

Testing done:
Tried "not-modifying" the Description, and Testing Done fields to determine the
output.

Wrote test case to publish an empty draft (test case passes).

Postive Test Cases:
* Added a file (successful publish).
* Remove a file (successful publish).
* Changing the description field (successful publish).
* Add comments (successful publish).
* Add branch/target people/bug number.

Fixes bug 3452.

Reviewed at https://reviews.reviewboard.org/r/6322/
Merge branch 'release-2.0.x'
Fix word wrapping in the "Edit Review" dialog.

I recently replaced the multiple CodeMirror boxes with inlineEditors in the
"Edit Review" dialog. One small bit of fallout from this is that the word
wrapping wasn't correct when saving a long comment. The problem here was that
the 'pre' element inside the review dialog didn't have our `.pre-wrap` macro.

Testing done:
Set a long body top field and saw that it wrapped correctly.

Reviewed at https://reviews.reviewboard.org/r/6371/
Re-fix user resource for public local sites.

2.0.x never had a proper fix for the user resource on public local sites, which
meant that rbt patch couldn't apply patches from non team-member users. This
change ports 2753b4b over to release-2.0.x.

Testing done: Ran unit tests.

Fixes bug 3582.
Merge branch 'release-2.0.x'
Add documentation on creating the database.

This adds a section at the beginning of the "Creating a Review Board Site"
document which shows the steps for creating a new database and a user to access
it for both MySQL and PostgreSQL. For MySQL, this makes sure that it shows how
to turn on UTF-8 before doing anything.

Testing done:
Built HTML docs.

Fixes bug 3000.

Reviewed at https://reviews.reviewboard.org/r/6377/
Merge branch 'release-2.0.x'
Fix usage of timedelta.total_seconds() in condensediffs.

The `total_seconds()` method doesn't exist in Python 2.6, so we can't use it
yet. This change replaces it with the equivalent implementation (and moves us
over to using true division throughout this file as a side effect).

Testing done:
Condensed some diffs.

Reviewed at https://reviews.reviewboard.org/r/6304/
Merge branch 'release-1.7.x' into release-2.0.x
Merge branch 'release-2.0.x'
Fix the get_email_addresses_for_group query with local_sites.

Against all odds, some users actually end up trying to set up local sites. In
this case, a user was a member of a review group on a local site, which broke
the query that chooses e-mail addresses for a normal group. I've added a
conditional to only check the user's local_site access if the group in question
has a local site.

Testing done:
Ran unit tests. Before this change, the new test failed. After it, it passes.

Fixes bug 3581.

Reviewed at https://reviews.reviewboard.org/r/6374/
Merge branch 'release-2.0.x'
Fix a couple more places where SVN accesses commit parts directly.

This fixes a couple more spots where we access the 'message' or 'author' fields
of a commit from SVN without checking if they're present. Trivial change.
Merge branch 'release-2.0.x'