Use instancing to make VBO data per-rectangle, not per-vertex.
Doing this slightly reduces the size of our VBOs and opens the door to performing clipping in the vertex shader. With more clever optimizations, we should be able to shrink the VBO size down even further. This patch includes a fallback for OpenGL ES 2.1. Unfortunately, this fallback increases the size of the VBOs significantly. This could be mitigated in the future, though not without effort.