Instead of constructing the render task tree each render (from the stacking context tree), construct a compositing tree during scene building. We create a Picture primitive whenever we *may* need to draw to an intermediate surface (i.e. filters, mix-blend-mode, 3d rendering contexts, frame output). During culling, we can then make decisions on whether a Picture does get drawn to an intermediate surface, or drawn directly into the parent target (e.g. if perspective is present, or if a child stacking context needs isolation due to mix-blend-mode). This opens up fixes for a number of issues, such as avoiding rebuilding the scene in the presence of property bindings, proper pixel snapping and clip mask handling for composited stacking contexts, fixing the context isolation bugs when multiple effects are present in addition to 3D rendering contexts. A consequence of this change is that plane splitting is handled later in the frame, during batch generation. This simplfies a lot of the plane splitting code. * Remove StackingContext structures after scene is created. Instead, they are only used during scene building, and then we drop the concept of a stacking context completely and rely on the Picture tree only. * Move output frame handling from build frame to build scene - so we can allocate Pictures based on this. * Pass clip node ID to push_stacking_context - will be used to handle #1957. * Move plane splitting to batch generation phase. * Remove (as no longer used): build() step of PicturePrimitive. HardwareCompositeOp. notify_waiting_for_root_stacking_context(). RenderTask::inflate (handled implicitly in Picture). AlphaRenderItem - We now just walk the primitive runs, saving memory allocations and duplication.