Share tags2

Supersedes #11351.
> append a parameter to an existing function whose default value will cause the function to behave as previously, while a different value cause it to behave differently? (See $includeShared)

Makes sense - an alternative approach would be to simply add another method and leave the existing method untouched regarding it's signature and return value



> Inject TagMapper into the TagManager and Tags classes via their constructors, as the constructors aren't part of the public I... interfaces?

Sure - you are free to rip the implementation apart as you like - the public interface has to stay consistent and shall not change it's behavior