Simplify rectangular texture program

Share most of the code between rectangular and texture programs by
using a texture space transformation which modifies texture coordinates
per-vertex. This also allows the elimination of the flipped texture
coordinates, further simplifying things. This is a preliminary step
to make it easier to implement masking to layer boundaries.
Abstract shader compiler into ShaderProgram struct

This simplifies things slightly and better encapsulates the shared
logic of shaders.
Set the SolidLineProgram texture space transform

Things seem to function properly without this, but this is more correct.
Eliminate z-coordinate in vertex position attributes

The z-coordinate is always 0, so we can just make it a constant in the
shader. This should result in less data streaming to the GPU when the
vertex coordinates change with clipping support.
Do not pass texture coordinates to shader

This can always be inferred from the unit rectangle coordinates, so we
simply omit them from the list of attributes passed to the shader.