Add PDF Normalization

#566. Still need to fix some coffeescript syntax, use random.Id, add a database migration, change `files` to `cached`, and update comments.
No, this is not correct. You should assume that `Storage` operates on files you know paths of. Imagine that it a S3 storage. You cannot just run GhostScript as output there.