cabal-install: Add command 'cabal saved-config diff'.

This command prints out a psuedo-diff between the user's ~/.cabal/config
and what cabal would generate if it did not exist.
cabal-install : Add test for 'saved-config diff' command.
cabal-install : Implement 'saved-config update' command with a test.
Store some fields of SavedConfig in de-duplicated lists.

During implementation and testing of the 'saved-config update' feature,
it was found that `mappend`ing SavedConfig could result in duplicate
entries in some fields which were lists, eg the fields extra-prog-path,
remote-repo and build-summary.

The solution was to add and use a 'NubList a' type, a list where every
element in the list is unique to the list and the original list ordering
is maintained. The Monoid NubList's mappend implement is just:

    NubList xs `mappend` NubList ys = NubList . nub $ xs ++ ys

which preserves NubList's required properties (ordering and unique-ness
of elements) and meets the requirements of the Monoid laws (identity,
associativity and closure).

Closes: #2160
Cabal : Add tests for Distribution.NubList.