Properly shut down all the new extension hooks.

The new extension hooks weren't calling the parent shutdown() functions,
preventing them from properly unregistering themselves. This fixes them
to all call the parent methods.
Fix interdiffs which revert changes.

When an interdiff reverted changes to an entire file, it would display the
change for that file as if it were the original change (instead of reverting
the original change).

The major issue here is that we were relying on the presence of an interdiffset
for the given file when computing the fragment URL, but if the change for that
file has been reverted, there will be no interdiffset.

There was some code in here already to fix this particular issue by adding a
'force_interdiff' flag. I'm not sure if it was ever actually fixed and
regressed again, or if that was from a previous attempt to do so.

Testing done:
Created a pair of diffs where the first one introduced a change to a file, and
the second reverted it. Saw that when I loaded the interdiff, I saw a diff of
that change being removed, and that the headers for the diff columns read "Diff
Revision 1" and "Diff Revision 2 - File Reverted" instead of "Revision ....."
and "New Change".

Fixes bug 1486.

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