Share tags2

Supersedes #11351.
It sets the result of a database query which is called when you call new Tags() which is super weird and hard to test. Each method that accesses the tags should load them seperately and cache if necessary (which i dont think is needed). 

Also adding stuff like isEmpty() is IMHO completely unnecessary since you get the tags anyways after calling the methods, why cant you just compare the length by yourself, then you dont need to do weird caching stuff for this purpose