Added a readme for the demo zip file.  In a future version I will include the readme in the zip file, but I don't want to check in a new 21MB binary file only because I forgot the readme on the first version.
Adjusted the matrix data that was sent to the vertex shader so that the position vectors would be rotated and translated before being sent to the fragment shader for lighting calculations, and the vertex normals would be rotated (but not translated) before being sent as well.
Made some naming changes to the vertex and fragment shaders to clarify which values were in model and world space, but now the plane isn't lighting up.
Figured it out.  I had changed the name of the uniform 'light_position' to 'light_position_world' without changing the string in me_GL_window.cpp for the uniform location, so the 'light_position_world' always had a default value of all 0s.  It's working now as it did before, but now there is better naming in the shaders.
Merge branch 'lighting'
Altered the shader handler so that helper functions were local to the source file only, and altered it to make use of a generic shader installation function.  The next goal is to alter it to be able to install multiple shaders.
Created a generic shader program installation helper function and altered 'install_shaders()' to call it.  The next goal is to create two shaders and use them both.
Altered 'install_shaders()' to install both my lighting shader program and a color pass-through function that did no lighting.  I was able to activate both shaders (not simultaneously, of course) at the end of the shader installation and discovered that they both work.  Woot!
Commit user error (reversed -a and -m).  Managed to get two shaders working simultaneously.  It took awhile, but I finally figured out that my basic problem was that I inclorrectly wrote the shader handler's 'activate_this_shader' functions.  Oops.  There is more experimenting to do to see if GL buffer objects are dependent on or independent of program IDs.
I don't know what's going on, but my cube is being squashed in odd ways when I try to use only one vertex buffer and one index buffer instead of one for each program.  The symptoms look like some of my indices are way off, but I can't find any problem with what I have.
Got it!  I had a buffer byte offset that was off when I was specifying the vertex attrib pointers for the cube light.  I still don't know why the vertices were wonky (but not squished...you remember, right?) when I was using two shaders.  Now I am using only one, and all is right in the world.  Next goal: Make the diffuse light location move with the mouse when the mouse is clicked and make the cube follow the light, thus fulfilling it's name of 'cube light'.
Started to add code to move the light, but then I realized that such code would be best suited for the lighting branch.
Altered the cube light to move when I click the mouse.  I had to alter the camera a bit to get some 'strafe' and 'view direction' vectors, but it's working now!