Share tags2

Supersedes #11351.
Is it permissible to
 1. 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`)
 2. keep the `$sync` parameter, but change `addMultiple()`'s behavior to always sync regardless of its value?
 3. Inject `TagMapper` into the `TagManager` and `Tags` classes via their constructors, as the constructors aren't part of the public `I...` interfaces?