Don't allow dashes in format or update_type

In order to reduce confusion require underscores to separate words in
these fields (similarly to keys in the links hash).

There's only one format that was using dashes (manual-section), and the
publishing tool has now been updated to use underscores. A migration
updates existing items.

All the update_types in use are currently single words.
Merge pull request #88 from alphagov/underscored_formats

Don't allow dashes in format or update_type
Pending specs for publish intent route registration
Handle invalid types for publish intents.
Add validations on publish intent route set.

This includes being able to construct a route set from a publish intent.
Register publish intent routes on save

This does not cover filtering out the content item's routes as part of
this process.
Add validations for content item rendering_app.

This wasn't being covered on the model, or in the RegisterableRouteSet
Add comment explaining why routes are before save
Refactor RegisterableRedirect to avoid duplication.

It shares all the validations of RegisterableRoute, so it makes sense
for it to inherit from it.
Only register subset of publish intent routes.

In order to avoid interfering with an existing content item, when
registering routes for a publish intent, we only register routes that
don't already exist on the content item.
Validate absence of extra route keys.

Nothing should be setting these, but if they do get set, they could
break the comparisons in RegisterableRouteSet.from_publish_intent when
removing a content items routes from the intent's set.