Bitbucket post-receive hook

This is a Bitbucket post-receive hook that will automatically close review
requests as "submitted" after a push. To determine which review requests should
be closed, it scans through each commit's commit message for the following
strings (case-insensitive): "Reviewed at <reviewboard_url>/r/<id>" or "Review
request #<id>". The regex used for this can be overriden in settings_local.py.

Testing Done:
Basic testing on a git repo performed. Test passed successfully.

All tests carried out on both mercurial and git repos.

Tests:
1) Close an open review request.
2) Try to close a review request that already has been closed as submitted.
   (Logged a warning saying that the review request has already been
   submitted).
3) Try to close a discarded review request. (Marked the review request as
   submitted)
4) Push without a review request id in commit message. (Error logged that the
   request id does not exist).
5) Push with a non existent request id in the commit message. (Error logged as
   Review request id does not exist.)

Reviewed at https://reviews.reviewboard.org/r/5653/
Refactor HTTP access out of HostingService class.

This change adds a new `HostingServiceClient` class which handles the basic
details of HTTP and JSON communication with hosting service APIs. This is
primarily just extracting the functionality out of the `HostingService` class.
Individual `HostingService`s can override this class to add additional checking
(such as GitHub's checking of rate limit headers), or add higher-level API
functionality.

Testing done:
* Ran unit tests.
* Tested post-commit review request creation.

Reviewed at https://reviews.reviewboard.org/r/5691/
Add a JavaScript resource for DefaultReviewer.

This adds DefaultReviewer as a resource. It doesn't cover the full
featureset of the API, but does allow for basic interaction with the
resource (mainly, basic fetching and deletion).

This isn't used today in Review Board, but may be useful down the road,
and is being used in RBCommons. I've opted to add it here, since its
size is minimal, and it helps complete our JavaScript API support, which
will only help extensions.
Merge branch 'release-2.0.x'