DifferenceEnginge and the accompanying classes (DairikiDiff, etc) should be refactored so we get a system of pluggable components. The following things should be considered:
- We want an abstract marker interface for all kinds of diffs.
- There should be an interface for sequential, text-based diffs.
- Formatters for generating html, unified, and other diff output should be based on the interface for sequential diffs.
- Other types of diffs need to provide their own "private" formatters.
- The (misnamed) DifferenceEngine class is really a diff view class that takes care of loading all the information required to build the diff.