Don't reload the diff viewer when changing revisions.

This change adds a new API resource called "diff-context" which can take the
same revision/interdiff parameters as the diffviewer view, but will return only
the JSON data needed to replace the page.

This is wired up to some AJAX on the client side which will take the new
revision and change out all the data on the models. A backbone router will make
sure that the URL and browser history get appropriately updated.

At the moment this can be a little annoying because our UI jumps around when
things like the current-revision label get replaced. I'll be reworking some of
these UI elements to make sure that they use up the same amount of vertical
space for different diff revisions.

The next major steps, in addition to preventing things from jumping around, are
a redesign of the revision selector widget, and a redesign of how we do
pagination.

Testing done:
Loaded a bunch of different diff and interdiff revisions. Verified that all of
the appropriate UI elements (file index, files, revision label, revision
selector, comments hint) were updated in-place. Checked that pagination still
worked.

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