Refactored LCS and Differ code to get away from the pending Difference.

The goal is to make Difference an interface, with different subclasses for Add,
Change, and Delete. This change lessens the tight coupling to the legacy
Difference implementation.