Introduce TagSet domain object

Implements #to_h and #fetch

TagSet serialises to a hash at which point it sorts tag values for consistency.
This is essential for efficiently (ish) searching Postgres HStore.

I added this as a signal for intended use, we don't want people calling `tag_set.to_h.fetch(key)`

Maybe we could add a more semantically meaningful method like `#get_tag` or `#tag_values`?