Refactor Remote vs Local Cache

The motivation for this change is to allow artifacts downloaded
by RESTfulCache to be directly added to the LocalArtifactCache
without needing to decompress and recompress them.

At a high level, this is done by refactoring RESTfulCache such that it
no longer handles creating or extracting tarfiles itself and instead delegates
those operations to a LocalArtifactCache instance passed in its constructor.

This is a revision of a previous proposal along similar lines, though now
RESTful artifact cache is always passed to LocalCache at construction and
it now unconditionally delegates to the local cache for all file interactions.

This simplifies RESTful cache, reducing it to only the HTTP-related
functionality. This also centralizes tarfile creation and usage to just the
LocalArtifactCache.

TempLocalArtifactCache provides an alternate implementation of LocalArtifactCache
backed by tmpfiles (instead of a cache_root) which can be used by a RESTfulCache
to handle artifacts when running in a remote-only cache configuration.

Caches also now use stdlib logging instead of context.log since the latter
has references to the runtracker, making it almost impossible to pickle.