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/
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.
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/
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
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/
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.
Post-commit hooks now match repositories along with commit IDs.

When looking up review requests for a commit, we'd attempt to find one
that has a matching commit_id field if the commit description didn't
explicitly specify an ID. However, this lookup did not take the
repository into account, resulting in problems if two review requests
across two different repositories had the same commit ID.

This is not a major problem for Git and Mercurial. In theory, it could
affect Subversion on Google Code, but we actually have that matching
disabled (though we likely suffered from another bug as a result).

The repository is now passed to the matcher function, and is required
for commit ID matching.

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