A few Diff improvements.

* add `Added` and `Removed` Diff cases,
* make `diffImpl` a partial function, so it only needs to handle the
  appropriate cases; and
* added helper functions, `diffLists` and `localDiff` to simplify
  `diffImpl` implementations.
Add some Diff tests.