Enable setting attachment thumbnails through the API.

The summary is a bit of a lie. This theoretically allows setting attachment
thumbnails through the API, but it's really just plumbing--it's up to individual
mimetype handlers to actually implement it (if they want).

Testing done:
Used this in conjunction with a review UI extension that takes advantage of it.
Allow users to remove ssh from admin settings.

This change adds a "Delete Key" button to the SSH key settings page, which
allows users to get rid of old keys.

Testing done:
Both manually and unit test passed, includes:
* Creating a key from scratch still works
* Deleting works

Manually tested:
* Clicking Save when there's a key, doesn't trigger any event

Reviewed at http://reviews.reviewboard.org/r/3758/
Fixes bug 2743
Convert the "set submitted" svn hook to new api.

The svn commit hook to set a review request submitted only worked with the
pre-1.6 api. This patch makes it work with the new api. It drops support for the
old api.

Testing done:
Tested on my private setup with reviewboard 1.7.4 and subversion 1.7

Reviewed at http://reviews.reviewboard.org/r/3909/
Enable usage of non-standard SSH ports for connecting to repositories.

This allows rbssh to use a non-standard port when given either the -p
parameter or when a port is in the provided UR (hostname:port).

Fixes bug #2841
Convert RB.Screenshot to Backbone.

This is a fairly trivial change to migrate the old screenshot object to
Backbone.js. The only tricky part of this is that I had to add an indirection
step to BaseResourceModel to ensure that the parent object is loaded before
calling url(), because if we don't have the parent links, we won't have a URL
for the object.

Testing done:
Tested setting screenshot captions and deleting screenshots. Ran js-tests.

Reviewed at http://reviews.reviewboard.org/r/3947/
Convert RB.ReviewReply to Backbone.

This is another relatively simple conversion for the data model for ReviewReply
objects to be based on BaseResource.

Testing done:
Replied to an existing review with body_top, body_bottom, and children
CommentReply objects. Published that reply and saw it get saved correctly.
Verified that loading a draft reply worked as expected. Ran js-tests.
Add a CONTRIBUTING guide.

GitHub will show this when someone's contributing. Hopefully it will
lessen the number of pull requests.
Merge branch 'release-1.7.x'