Add disk cache.
Create cache dir if it does not exist.
Do not ignore I/O errors.
Merge pull request #24 from ruff/filesystem-cache

Add disk cache.