Added Differ, a specialization of Diff that creates generic Differences.

Diff generates Difference objects, and Differ, for flexibility, is an abstract
version that creates subclasses of Difference, for implementations that want to
add functionality to their own Difference subclass.