Catch & report scheduled publishing failures

In theory, this should not happen very often, if at all, as we'd
expect after 5 attempts, all scheduled editions to be successfully
published, even with contention between backend servers. When this
does happen though, we use exception notifier to report the failure,
including log output of what happened and the ids of the editons that
failed to be published.
DRY up "acting as" code

Pulled out the common logic for switching between users to the
Edition::AuditTrail module. Note that the use of a class-level
attr_accessor in AuditTrail is not thread-safe. Using Thread.current
would be a better solution, especially if we ever intend to use
something like sidekiq for processing background jobs.
Improve logging