Pull out diff-related data into a "diff context" object and initialize models from it.

The diff viewer needs a bunch of bits of data, which we render in a django
template as info in a <script> tag and then consume from javascript. This
change centralizes all of that info into a "diff_context" object which is
rendered using the json_dumps filter tag. This object is then consumed by a new
DiffViewerPageModel, which will parse the high-level object and create/update a
bunch of child models, which are then consumed by the various views that make
up the diff viewer UI.

Coming soon, we'll be able to consume this diff context either from the
javascript rendered into the template, as well as when it comes from an API
payload.

Testing done:
* Tested various pieces of the diff viewer UI to make sure that the initial
  data was still correct.
* Used this in conjunction with other changes that load different parts of the
  diff viewer without reloads.
* Ran unit tests.

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