Add state for queued publishing

Now that publishing is handled by the sidekiq queue, we should handle state of a PublishTask in order to give feedback to the user and provide a mechanism for tracking errors with queued publishes. Instead of using the PublicationLog for this we will use a stateful model 'PublishTask'. Which can be used for both error tracking purposes and editor feedback.

The code after `ensure` will be run whether or not an error was rescued or even raised. The call to `log_error` should be in the `rescue` blocks or in the `abort_task` and `requeue_task` methods.