Add unpublishing presenter.
Use Unpublishing format for unpublished editions.
Send unpublishing on unpublish action.
Data migration to push all unpublished editions.

Modifies PublishingApiRepublisher not to skip non-published editions if
they have an unpublishing.
Move publishable? logic to PublishingApi.
Add schema for unpublishing, validate in test.
Add redirect presenter.

Includes JSON schema validation.
Fixes to unpublishing presenter

Explanation renders as govspeak, and empty alternative_url should be
empty string not nil.
Remove unnecessary fields from presenters/schemas.
Custom exception for unpublishable editions.
Rename Redirect presenter to EditionRedirect.
Archive/unpublish trigger publish not republish.
Tidy up DataHygiene::PublishingApiRepublisher

Whitehall::PublishingApi.republish no longer returns anything significant and
instead raises an exception if something that isn't publishable is passed in.
Include "rendering_app" in unpublishing schema
Make tests more robust

Test for markup equivalence, not string match to deal with libxml
inconsistencies.
Tweak test data

An explanation shouldn't be present on a redirect unpublishing.
Correct presenter for consolidated unpublishings

The presenter_class_for_edition method was checking the attribute `redirect`
instead of calling the method `redirect?`. The problem with that is
unpublishings of reason `Consolidated` are implicitly redirects, rather than
because the attribute has been set.
Make sure redirects are only sent as paths

Depending on the environment the Unpublishing was created in, the
alternative_url may or may not start with `Whitehall.public_root`. For example,
, the unpublishings we get from a data sync will us the "https://www.gov.uk"
domain. This updates the presenter so that it always sends a path with the
redirect.
Add additional test coverage around translations

Specifically to ensure that unpublishings for each translation are pushed to the
Publishing API.
Make the Unpublishing factory more accurate

The edition associated with an unpublishing will have been put back to "draft"
from a "published" state, so needs to have publishing timestamps.