Distribution.Compat.CopyFile: add filesEqual for comparing contents
Distribution.Simple.GHC.buildLib: don't remove old files before building

We need them to compare against, so that we can decide if we want to
write new files or keep the old ones untouched.
Distribution.Simple.Program.Ar: Implement re-linking avoidance.

We do this by not putting timestamps into the .a file,
and not touching it if is already there and the contents are the same.
Distribution.Simple.Program.Ar: Emulate GNU ar's deterministic mode.

After invoking ar(1), replace each object file's metadata with zero for the
mtime, UID and GID, and 0644 for the file mode. Do not touch the existing
archive if the contents are the same.

This rewrites the previous patch to,
 ∙ also wipe UID, GID and file mode;
 ∙ do a single read/write for each header, and less seeking in general;
 ∙ do its work inside a temporary directory, via 'withTempDirectory';
   ∘ Which also deletes the temporary target when it's identical to the old.
 ∙ use Distribution.Compat.CopyFile.filesEqual;
 ∙ use the standard 'dieWithLocation' instead of invoking 'error'.
Distribution.Simple: remove ranlibProgram; was workaround for old OS X ld issues

∙ At one point under OS X, ld required the mtime of the symbol table to be
  not older than that of the archive itself. This means that even copying an
  .a file required invoking ranlib to update the symbol table mtime.
∙ However running ranlib renders pointless the deterministic mode of #1537.
∙ As of at least 2008 according to the BUGS section of ranlib(1), this has
  no longer been necessary.

First introduction: 12b35902b78acc65b67dcef60724ec480bef81f3
Current implementation: af3da760d2161462a1b28be640cd0f2126e3eb7b
PackageTests.DeterministicAr.Check: ensure metadata stays wiped
Avoid relinking if nothing changed