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.