Share tags2

Supersedes #11351.
Yeah, maybe. My original goal here is to change as little as possible with regard to the interface -- unless you set the `$includeShared` parameter in `Tags`' constructor, you shouldn't notice any difference in the behavior at all, as I wanted to make sure I'm not breaking an other apps that are already using `Tags`.