gl: Cache shader uniform locations

Instead of continuously calling glUniformLocation each time we have
flushed, cache the uniform locations in the shader object.
gl: Instead of using glyph bbox, we use computed x_advance/y_advance to
check whether glyphs are overlapping.
gl: Lazy compositor for msaa compositor.

In msaa compositor for fill, we do not need create a pattern_base struct
and mask structure this saves some time.
gl/msaa: When reducing clip check just source.

In the cases we use it is enough and it avoids checking the mask
intersection.
gl/msaa: Lazy compositor for stroke.

Similar to lazy compositor for fill, we reduce composite_rectangles_init
time.
gl/msaa: Lazy compositor for mask.

In msaa compositor, similar to lazy init for paint/stroke/fill, we can do
same thing for mask
gl/msaa: Lazy compositor for paint.

Similar to lazy compositor for fill and stroke, we also partially
initialize composite_rectangles for msaa compositor.
gl/msaa: Lazy compositor for glyphs.

We do the similar lazy compositor for glyphs.
gl/msaa: Use tessellate into traps directly for rectilinear stroke path.

We can skip using stencil buffer for overlapping.
gl: Support using a non-texture gl surface as a source/mask in drawing.
gl/msaa: Add image "atlas" optimization.

In gl, we create a image atlas.  When an gl surface is to be painted to
target surface, we check whether the image can be cached into the atlas.
Using the image atlas, we can avoid flushing and rebinding textures of multiple
images if they are cached in the atlas.

For this version, we don't cache other backend surface yet.
gl: Adaptive image atlas

Initial image atlas size is 512x512, and will grow to max 2048x2048.
When existing image atlas is not big enough to hold new image cache,
a new image atlas is created.  Each image in the existing image atlas
is then copied to the new image atlas one by one.  After copying, the
existing image atlas is then destroyed.
gl/msaa: Implement hairline for stroke.

A hairline is a stroke of simplifies the tessellating algorithm
for stroking using other draw modes.
stroke: Fix stroking of arcs with large line widths

Fix test case, line-width-tolerance, for the stroke shaper (currently
used only by the GL MSAA compositor). Instead of drawing quads between
spline points, draw triangle based on the actual spline edges. This
roughly follows the approach of the tristrip and polygonal shapers.
gl/msaa: Avoid stencil buffer usage for simple curves

If the stroke path contains a single curve_to, we can avoid
stencil overlapping check.
Fix get-path-extent after changing the pen vertex range finders.

Now the result of the dots and multiple dots is just approximate.
gl/msaa:  We can prevent stencil overlapping check in these situations.

If single line and single arc both are continuous when width is 1.0 we
can avoid it, also in the general case if it is single line and
continuous.
gl: Scale radial gradient parameters down may introduce rounding error.

Instead of using scaled parametes to generate uniform values, we
compute them from origin radial gradient pattern.
gl/msaa: Lazy initialization for glyph compute bounding box.

We do the initialization creating a mask that is big enough for text
instead of whole surface.
gl/msaa: Draw trap optimization.