function Program(gl, options) {
    this.gl = gl;
    this.options = options || {};

    this.registeredMaterials = {};
    this.cachedUniforms = {};
    this.uniformTypes = [];

    this.definitionVec4 = [];
    this.definitionVec3 = [];
    this.definitionFloat = [];
    this.applicationVec3 = [];
    this.applicationVec4 = [];
    this.applicationFloat = [];
    this.applicationVert = [];
    this.definitionVert = [];

    if (this.options.debug) {
        this.gl.compileShader = Debug.call(this);
    }

    this.resetProgram();
}
A class that handles interactions with the WebGL shader program
used by a specific context.  It manages creation of the shader program
and the attached vertex and fragment shaders.  It is also in charge of
passing all uniforms to the WebGLContext.

@class Program
@constructor

@param {WebGL_Context} gl Context to be used to create the shader program
@param {Object} options Program options

@return {undefined} undefined