Honour `CLUTTER_ACTOR_NO_LAYOUT` more efficiently
If an actor sets flag
CLUTTER_ACTOR_NO_LAYOUT then that means it
is (or should be) unaffected by
queue_relayout calls in its children.
So we can avoid propagating
queue_relayout all the way up to the stage
and avoid a full stage relayout each time.
But those children whose parent has
CLUTTER_ACTOR_NO_LAYOUT still need
to be allocated at some point. So we do it at the same point where it
happened before. Only we now queue a shallow relayout so the
run on the next frame doesn't need to descend the whole actor tree anymore.
Only a subtree and hopefully very small.
For free-floating and top-level actors this provides a measurable
performance benefit. According to Google Profiler, calls to
_clutter_stage_maybe_relayout are now so cheap that they no longer show
up in performance profiles.
Related to #590 (closed)