• Support arbitrary rasterization coordinate roots.

    This allows us to choose to rasterize any picture in an
    arbitrary coordinate space.
    
    This fixes a large number of real world pages that use 3d
    transforms. It also simplifies fixing any remaining 3d
    transform related issues.
    
    The initial patch uses this to promote any picture that has
    perspective into a rasterization root.
    
    There are a number of benefits to this:
     * It simplifies a lot of the math involving plane splitting,
       since we don't need to deal with splits drawn in screen-space.
     * It makes caching perspective rendered pictures much easier,
       since we can cache them between frames even when the
       root coordinate system is animating the picture (this isn't
       implemented yet, but is a simple-ish follow up).
    
    We can make use of this to render text shadows in local space,
    as a performance optimization (which can then be cached between
    frames and display lists).
    
    Part of this change involves simplifying the plane splitting
    code to work in a similar way to traditional brush images. It's
    likely that in the future we can completely remove ps_split_composite
    and draw plane splits with brush_image for better batching.
    
    Introducing a new coordinate space allows for some more optimal
    calculations of required raster rectangles, which reduces the
    number of pixels that we draw for clip masks and transformed
    pictures, in some cases.
    
    Follow ups:
     * Support arbitrary rasterization scales for raster roots, for
       better quality / performance.
     * Support caching of pictures as discussed above.
    gw3583 committed Sep 9, 2018