Add caching

Magical caching.

Reads in an initial cache, ignores SDs with matching hashes, writes out the final state of the cache.

Uses a StateP (Pipes.Lift)

Slight restructure/refactor of how the shutdown signals are processed to support writing out the final state of the cache.