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.
Always always in migrations use in query same query as you used in find. You have to verify your assumptions. You assumption at this point is that files do not exist. You have to make sure that query works only if that is still true. There might be a race condition and somebody else might change the document in meantime.