WIP - Service objects for (force) publishing

This is work in progress for two of the service objects for Edition
workflow. There are a number of key features that have yet to be
fleshed out. Firstly, a number of post-publishing actions that are
currently handled in callback hooks on Edition or as Rails observers
are yet to be moved into the service objects. These are: GovUkDelivery
notifications; search (re)indexing; and the re-indexing of supporting
pages and related editions (handled by observers at present). There is
also the notification of relevant users, which is currently part of
the controller workflow (see notify_users_of_edition_publishing in
EditionWorkflowController).

Rather than having all these actions performed inline in the service
objects, my thinking was to use the observer pattern and a basic
pub/sub-style API to decouple these related actions from the core
business logic of publishing an edition. The code would look something
like this:

```ruby

class EditionPublisher
  attr_accessor :edition, listeners

  def initialize(edition, listeners=[GovDeliveryNotifier, EditionSearchIndexer, AuthorNotifier])
    @listeners = listeners
  end

  def perform!
    if can perform?
      publish_edition!
      listeners.each { |listener| listener.publish_succeeded(edition) }
      true
    else
      listeners.each { |listener| listener.publish_failed(edition) }
      false
    end
  end

  ...
end
```

So the default listeners would be injected in, but could be easily
overridden, not only in the tests, but also in other parts of the app
when necessary. For example, we might want to publish some editions
in a data cleanup script and skip the notifications, but still perform
the indexing. Or we might want to add additional listeners for logging
during an import.
Add pub/sub for callbacks to subscribers
Pull author publish notification from controller

This moves the logic for notifying authors of edition publication into
the service objects as registered subscribers.
Move gov delivery notifications to service object
Remove unused code

This was required to cleanup attachments with double-extensions. As
the bug that caused them is long fixed, we can get rid of this code.
Add missing behaviour to force publisher

Editions with a scheduled publication time should not be force
publishable.