Share tags2

Supersedes #11351.
In general its best to handle exceptions on the level where they can be handled. Another best practice is to prevent leaky abstractions, e.g.: your Tags class should not throw exceptions from the database mapper but catch them and throw a separate exception. The question is why an error is just silently swallowed (if one is expected)