Issue #13: now distinguishing between surface created vs changed wrt caching
Closes #13; fixes #20; fixes #22

Fixes #22: OurGLRenderer now supports user-defined transforms, which can be associated with different SpriteContexts.
For instance, this lets us render text in device space, and other sprites within algorithm space.

Added OurGLTools class for miscellaneous wrappers and whatnot to OpenGL functions.

Fixes #20: Each GLSpriteProgram instance has a particular SpriteContext (many will share a common SpriteContext), which determines what kind of sprite it is.  For example,
a font sprite uses color tinting, whereas a 'normal' sprite context does not.