Store tags for an artefact in a new structure

This changes the Taggable trait so that tags are stored as an array of
hashes, containing the tag type and tag id. This is an improvement over
the current way in which tags are stored, because it takes into account
the tag type in addition to its id.

For now, this happens on save in addition to the tag_ids field, which
remains the canonical source. Over time, we intend to remove the tag_ids
field.

Storing it this way is gives us flexibility to extend how we tag items
in the future - eg. denoting a tag as the primary of its type for this
artefact.
Add method to look up tags by tag_type and tag_id

This method takes an array of hashes, each representing a tag and
containing a tag_type and a tag_id value. We then build up a query
using MongoDB's any_of query type.