Makes dynamic primitives take two values instead of one in GlrContext

This is needed to implement stroked round borders where two consecutive
borders have different width.
Adds ref() and unref() methods to GlrBatch and hides free()
Updates how layers fetch primitives and track batches
Adds GlrStyle, GlrBorder, GlrBackground and GlrColor

and initial API methods to use them.
Dump of WIP changes that explores the 'all-rects' approach

The 'all-rects' approach is escentially the original approach but using
rectangles as the only primitive. All non-rectangle geometry is
drawn in shaders using a rectangle as the base geometry.

This has the huge advantage that the ordering problem is completely
eliminated, since instances are all rects and always rendered in order.

The downside is that shader complexity (specially fragment) increases
considerably. Mostly for drawing borders as per the CSS spec, which
accounts for the majority of non-rectangle geometry. Still, this
approach seems even faster than previous approach, and because of
the absence of ordering problem, it can be implemented using current
API.
Removes legacy/unused code
Adds a temporary, public lookup_face() method to the texture cache

This is to allow apps to reuse an FT_Face created by the texture cache.
Populates the layout left and top of the glyph in a tex cache surface
Breaks and organize lookup_font_glyph() code in tex cache
Adds a new draw_char_unicode() method to GlrLayer
Adds zoom-in/out to the examples using ctrl+/-
Adds new examples text-layout to showcase text drawing using harfbuzz
Adds new arabic and chinese font files
Considers zoom factor in the border widths and font sizes of examples
Fixes name of GlrLayer::add_instance_with_relative_transform()
Dumps the latest experiments consolidating the 'all-rectangles' approach