Represent tag tuple keys as strings, not symbols

We currently use symbols as the keys for the hash tuples that store 
tag and tag type data on artefacts. This sometimes results in a mixture 
of both symbols and strings in use, because the tuples are returned from 
the database with string-based keys. This causes problems, as we always 
use symbols in the code to find tag IDs and dedupe tags of the same type.

Rather than use `with_indifferent_access`, the simplest way to fix this
to use string-based keys across the board.
Merge pull request #196 from alphagov/string-keys-for-tag-tuples

Represent tag tuple keys as strings, not symbols
Add factory for draft and live tags

Modify the existing factory for tags to add a 'draft' and 'live' trait, 
and then use them to define 'draft_tag' and 'live_tag' factories.
Update tests to use the 'live_tag' factory
Set tags to draft by default
Add a state machine to the Tag model

This adds a simple state machine to the Tag model that supports 
publishing a tag from draft to live.

The 'state' attribute has been set as a protected attribute, so that 
it can't be mass-assigned.