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.

Given that we never use `fetch` on this object, do we need to implement it?