Uses shelve to track hashes
Major tweak: uses shelf cache, so pdf's can be served statically