Refactor building of Publishing API presenters

Moves the knowledge for presenting a given model into one place.
Replace bespoke workers with a generic one

Now we have a way to instantiate the correct presenter for a given model
instance, we can use a generic Publishing API worker to push any model we like
to the Publishing API, assuming a presenter exists.

Note that the existing workers have not been removed yet. They can be removed in
a later pull request once any existing queued jobs have been worked off.
Data hygiene class for (re)publishing instances

Convenience class for pushing a bunch of models to the Publishing API. We're
likely to be doing this a lot whilst we're moving content to the content store
and evolving the data that we send.
Ensure class namespacing is honored
Don't misuse Struct

Turns out that subclassing Struct causes issues with Rails class reloading.
Besides which, it also appears to be a bit of an anti-pattern, as outlined here:
http://thepugautomatic.com/2013/08/struct-inheritance-is-overused/.
Add a data migration to rename a gambling duties document collection

- There was a ticket in the second-line backlog about renaming this
  document collection because it referenced "forms", which the page no
  longer housed. Now it only references "notices". It was decided that
  this data migration approach was the most sensible, following on from
  #1861.
- In this data migration, I've also added a line to remove the old
  collection from the search index, so the same titled document won't
  appear twice - thanks Tekin.
Fix data migration
Merge pull request #1854 from alphagov/refactor-publishing-api-presenters

Refactor Publishing API presenters and workers
Merge pull request #1867 from alphagov/rename_collection_gambling_duty_notices

Add a data migration to rename a gambling duties document collection
Enable all services to be deselected for a WWO

www.agileplannerapp.com/boards/173808/cards/8045
fixes: https://govuk.zendesk.com/agent/tickets/802017

adding a hidden field for the check box group for
services for a worldwide organisation, which enables
deselection of all services, similar to:

http://api.rubyonrails.org/classes/ActionView/Helpers/FormHelper.html#method-i-check_box-label-Gotcha
Add format_display_type to schema and presenter.
Republish case studies to content store.
Add content_id field to documents.

Migration to create the field. The content_ids will be populated
separately in a data migration.
Data migration to ensure documents have a content_id

it's better to do this in a data migration so that we are sure that the
application server code has reloaded when this is run.

If this was done in a database migration then there would be a race
condition where:

* all documents had had a content_id set
* application code had not reloaded
* user creates a new draft document which does not get the content_id
  set

We then end up with a few documents without content_ids.
Ensure that content_id is set on new documents

The Edition::Identifiable module handles the integration between
edition and document including the initialization of Documents.
Exported json for an edition should include content_id
Data migration to republish all published editions to the content store

This will enqueue sidekiq jobs to actually perform the republishing for
each edition
Allow update_type to be overridden in publishing api presenters

Sometimes we'll need to send documents with an `update_type` of
`republish`. Therefore we need to be able to pass this option into the
presenter.
Options passed to the API worker should pass to the presenter

We want to be able to 'republish' documents, so we need to be able to
pass an `update_type` option to the worker.

In an ideal world the test case for this could have been neater. But the
helpers provided by gds-api-adapters do not allow stubbing requests
without doing an exact match on the body json, so we need to
render the entire presenter output.
DataHygiene::PublishingApiPublisher should 'republish'

Updates should be sent as 'republish' messages. The only use case for
this class is bulk-republishing already-published things, so it seems
reasonable to make this the default.