Adds support for old-style separate programs.

I think I will refactor some of this responsibility to the
Engine::Graphics class. It knows best about when to load a program and
it might even know the best order to render things. At any rate, it
won't try to load a program already loaded, for instance, although who
knows if OpenGL just ignores such a case anyway.

At any rate, it adds complexity and redundancy. All drawing routines
right now have to bind the program and then upload uniforms and then
draw. The graphics engine could notice that uploading a uniform would
require the reloading of the program? or should the VAO notice that it
has not done so and load it? Hmm.