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/