Streamline spectator shroud detection and rendering detection a bit

Fixes #2940 and removes the hard-coded observer detection to local player and shellmap. For Cloak.cs and InvisibleToEnemy.cs I still provide a backfall to World.LocalPlayer if Shroud is null. Don't know if this is still required.

There are some other minor glitches left because #2759 is incomplete. Ranks are rendered even when the unit is HiddenUnderFog in spectator mode. The same applies for the rank-up and cash tick effect as well as building animations.