Add a new UserSession model, and redo support for starring.

This introduces a UserSession model, which is a singleton that
represents the user's session. It is intended to replace gUsername, and
to provide the API for handling the watched groups/review requests.

The ReviewGroup model has been rewritten to be on Backbone.js and to
make use of this new API.

The existing ReviewRequest code now uses this API as well.

Unit tests were added to test the basic UserSession singleton logic, and
the individual setStarred functions.
Move the diff fragment loading into the new DiffViewer model.

This introduces RB.DiffViewer, which replaces and consolidates our old
diff fragment loading code. It cleans up the API a little and removes a
bunch of redundancy. It also simplifies RB.Diff, which was previously
doing too many different things.

This will later be used to store additional state of the diff viewer,
when that's ported over to use Backbone.
Port RB.Diff to Backbone.js.

The resulting RB.Diff is pretty tiny, since it's just a thin wrapper
over BaseResource's functionality now, and since the diff fragment
support has moved into DiffReviewable.

All it's used for now is for uploading new diffs. It provides an
rspNamespace and a function for returning human-readable error strings,
given an error payload.
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/
Merge branch 'master' of git://github.com/reviewboard/reviewboard into banner
Saving to checkout