call-with-file-lock: fix port leak on error escape
add `file/cache`

In base, so it can be used by the package manager.
raco pkg: use a download cache

Downloaded files are keyed on the source URL and checksum, and the
cache is used only when a checksum is known.

The cache addresses two situations:

 * when installing many packages over an unreliable connection,
   the cache effectively lets a retry pick up where a previous
   attempt failed

 * when creating clean builds frequently, the downloads from a
   previous build can be reused (as long as the package's checksum
   does not change)

The cache location and limits are configurable, and they default to
a subdirectory in the user's add-ons directory (not version-specific),
1024 files, and 64 MB.

If a failure happens during staging (checksum and unpackaging) of a
package that has an entry in the cache, the entry is removed. The
file-cache library, meanwhile, implements a limit on the cache size
and defends against uncooperative filesystems.
raco pkg: repairs for SQLite-based catalogs