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.