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 allocate
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)