Refactor publishing

This is the refactoring stage of my work on withdrawing documents.

I've extracted create, update and publish into service objects that have decoupled observers that are notified when documents change. The Content API rendering and export, the finder API and Panopticon all observe into these events. This should make the transition to the future architecture much easier as well as making the current code much simpler.