Support creating tags with JSON requests

This adds support for creating a tag in Panopticon by making a JSON
request. When a tag is created successfully, a 201 status is returned, 
along with a representation of the tag object. When a tag cannot be 
saved due to a validation error, we return a 422 status, along with 
details of the errors.

As actions already exist for HTML-formatted requests, the changes
here are mainly to support JSON requests on the same endpoints. There is
an additional change to allow tag attributes to be specified in requests
without the need for a root-level 'tag' entry.
Change tag routes to include the tag type and ID

So that other clients are able to make changes to tags without having to
know their internal BSON IDs, this changes Panopticon so that tag 
resources can be accessed at an endpoint which can be inferred from its
tag type and ID. This additional format looks like "/:tag_type/:tag_id", 
and supports tag_ids which contain slashes (eg. child tags). 

To make this change, I've changed config/routes.rb to add a route 
constraint to the tags resource so that slashes are permitted in the ID.
I've also added a new method to the Tag model (using the enhancements 
convention) which will find a Tag from its BSON ID or tag_id.
Support JSON requests to update a tag

This changes the update action to correctly handle JSON requests. 

We also now raise a more explicit error when a request is made to update
the tag_id or parent_id fields for a tag.
Change the publish action to be a POST

Having had a read of RFC 7231, I think the publish action makes more 
sense to be a POST rather than a PUT, because it's an action that should 
be non-repeatable (a tag can only be published once), and is an explicit 
request to advance the publishing workflow, rather than just updating 
the state of the tag.
Support JSON at the tag publish endpoint
Remove the legacy curated list functionality

As we no longer display content in curated order in mainstream browse,
this functionality is now redundant, so we're not going to support 
JSON requests which update the curated lists. It also makes sense to 
remove the UI for curated lists to avoid confusion.
Make the tags route id constraint more specific
Merge pull request #216 from alphagov/tags-json-api

Support JSON requests to create, update and publish tags

https://www.pivotaltracker.com/story/show/79177806