Return an informative error message when a review is posted with a duplicate commit id.

The reproduction steps described in bug 3328 could not be reproduced. When
following the steps, I would receive a HTTP 500 error when making the second
post. This is a result of Django not being used previously to validate the
data. Instead it was being left to the database, which is checked and handled
differently depending on which database is used and it's configuration. To fix
this creation was changed to instantiation to prevent partial saving, a
validation step was added prior to saving, a new webapi error was added, and
the error code was documented in the manual.

Testing Done:
I tested to ensure when making the second rbt post that the error was caught
and an informative error message was displayed, rather than an HTTP 500 error.
I also checked after the failure to ensure that a partial review object was not
created. I also tested to ensure that posts could still be created if they had
a unique commit id.

Bugs closed: 3329

Reviewed at https://reviews.reviewboard.org/r/5815/
Merge branch 'release-2.0.x'
Add 'phtm' to the displayed list of extensions for the security checks.

The security checker for file attachment extensions was checking .phtm files,
but they weren't listed in the text.

Trivial fix.

Fixes part of bug 3368.
Merge branch 'release-2.0.x'
Add functions for scanning accessible repositories on GitHub.

This change provides some functionality for listing all accessible
repositories on GitHub owned by the authenticated user, another user, or
an organization. This will eventually be used for the new repository
configuration UI.

This is based on Olessia's work as part of UCOSP in late 2013/early
2014. It updates her work for the GitHubClient changes recently made,
abstracts out API list pagination support, and fills in some of the
documentation.

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