Begin moving to new DiffReviewable/DiffReviewableView objects.

This forms the base of the upcoming diff viewer rewrite. The older
DiffReviewable has moved into diffviewer/models/, and its fragment
loading functions have been loaded to operate partly on state created
during instantiation, instead of taking that state as parameters.

DiffReviewableView is what all the rendering code for a given file's
side-by-side diff will be handled by. Right now, it just has the code
for finding a table row for a given line number. The logic for that code
has remained the same, but has some cleanups (line number parsing has
been factored out into a function and var statements have been moved to
the top of the function).

Future changes will move more of the diff viewer code into here, piece
by piece.
Move line commenting and chunk selection functionality into DiffReviewerView.

The majority of code that lived in $.fn.diffFile has been moved into
the new reviewable.

All the code that handles line selection is in a CommentDiffSelector
object, which listens for events on the diff reviewable's element.
This keeps the main reviewable much cleaner and easier to work with.
Add a mixin for registering key bindings.

KeyBindingsMixin makes it easy to map keys in a view to functions. Any
view using this mixin will listen for key presses matching any of the
keys listed in the View.keyBindings map, and call the appropriate
function.
Move diff reviewable setup and navigation/anchor selection out of diffviewer.js.

DiffViewerPage is now responsible for all keyboard navigation around the
diffs. It makes use of the new KeyBindingsMixin. It also owns anchor
selection, which (currently) both diffviewer.js and DiffReviewableView
make use of through a temporary RB.scrollToAnchor function.

DiffViewerPage also now sets up the DiffReviewableView for a loaded diff
fragment. This was tied closely enough to the anchor setup that it
seemed worth including in the same change.
Add diff viewer unit tests and fix some bugs.

This introduces unit tests for different parts of the diff viewer. This
right now covers hovering and selection (adding rows, removing,
finalizing with a comment, and more).

Some of the tests uncovered bugs. Particularly with removing rows from a
selection when selecting up and then down. These were long-standing bugs
that existed at least in 1.6. Those bugs have been fixed.