Sprockets compression

This pr does a few things:

* Instead of using timestamps, we use an MD5 hash of the current time.
* puts adds a new line to the end of the text already, but a new line was required at the beginning.
* ensures that folders exist. Quite often, a `Error: FileSystemException: Cannot open file` if the folder didn't exist in the cache.