Add a pending integration test to start with.
Separate out presentation logic from ContentItem.

Using one `as_json` method for presentation on both side of the
public/private divide meant we were only presenting publicly-visible
fields back in response to a `PUT` request, even if the errors we were
reporting were in private fields. Pulling these two views apart should
also make it easier to pull in titles and public-facing fields for
linked items.
Use the private presenter for the message queue.

As it stands, the view we send back to the publishing tool and the view
we send out to other publishing apps are the same; if this changes,
we'll need a third presenter.

The messages we send out need the `update_type` field; there's no harm
sending this back in responses to publishing tools, since they will have
provided it in the first place.
Add a `links` field to content items.

This includes validation on the shape and type of the `links` structure,
because Mongoid will only validate that the value is a hash: we need to
specify any further restrictions on the shape of that hash ourselves.
Add related links to the model.

This is intentionally over-simplified, to the point where it doesn't
take account of redirect items (or duplicate content IDs of any kind)
and is going to perform horribly on any decent-sized data set, but it
covers the basic idea.
Ignore redirects when looking up linked items.
Pick the latest content item with a content ID.

It is possible (for instance, when setting up a redirect) to have
multiple items with the same content ID. In these cases, the
latest-published wins.
Show linked items in the public content view.