SceneInfluencer and ViewerAffecter manually alter visibility based on parent.

Previously, SceneInfluencers and ViewerAffecters would not alter their
visibility - itself a function of the scene - if their parent models were
made invisible. The parent models' invisilibility simply disables
compositing, so the effect was to make shadows which, then the scene
moved, would stick in the same place. This may be related to, but likely
isn't the source of, problems with enemy projectiles leaving shadow trails.
However, it does affect the scene editor when changing the visibility of
layers with models which cast shadows, and can affect objects in-game if
their visibility is altered in some way.

To accomplish this, added visibilityWasSet to the Model and Implementation
classes. On the model, it calls into getChildren (another new function) to
notify child models. On the implementation, SceneInfluencer and
ViewerAffecter ask for the current parent visibility given by isShowing
(yet another new function), which itself chases up the scope tree to the
root asking for all the branches' visibility.