An Archiver is an abstraction for packing and unpacking archives,
that utilizes the same set of sources for both operations. For packing,
the sources are the files that will be included in the archive. For unpacking,
the sources are used for file tree diffing when extracting the archive.
The TreeDiffer will compare files within in archive to files
at the destination, and only unpack files that differ, and also
remove files from the destination that are not in the archive.