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.
Does this gives the client access to a publication's `files`? Right now, when I open a publication though my browser, it seems like the client calls `url()` twice. The first time, everything is fine and it returns the proper url for the default pdf, but the 2nd time it calls it, it doesn't seem to have access to `files`, so nothing is returned and the PDF doesn't get rendered.