Make the cache directory if needed.
Catch various errors, improve existing messages.
Make main script executable.
Pretty much implement the main thing. Should really have made more commits during this, but never mind.
More docstrings!