Split md5/hardlink stuff out of SortedDict into FileDict

I should not have overloaded SortedDict with all the md5 and hardlink
tracking stuff which only used by file lists.  There are other uses of
SortedDict elsewhere in the app that need not be cluttered by these
additional features in SortedDict.

Solution: derive new class FileDict from SortedDict, and put the md5
and hardlink tracking code into that.  Then use FileDict instead of
SortedDict where those features are needed.