Added taggable behaviour

I wouldn't allow passing strings. The api is cleaner if we must always pass a `Tag` object.
It's a value object, nothing wrong with that. Don't represent domain with primitives.