Port radial gradient shader to be a brush primitive.
This is mostly a straightforward conversion, with a couple of interesting notes: * The previous radial gradient shader was missing a transform implementation so would never have worked properly with rotation and/or perspective. * We didn't (and still don't) detect if a radial gradient is opaque - it's always assumed transparent. So even though it can now opt in to segments (and save clip mask generation time), the inner segments will still be in the alpha pass. We should fix this! * Previously, we used to append the gradient stops directly after the primitive information in the main GPU cache handle. Now, there is a separate GPU cache handle for the stops. This is quite a bit more efficient in the GPU cache, since the size of the stops array is large, and a power of 2, it now fits exactly into a GPU cache slab, and allows the main primitive data to be allocated in a smaller row.