function createProgramFromSources(gl, shaderSources, opt_attribs, opt_locations, opt_errorCallback) {
	    var progOptions = getProgramOptions(opt_attribs, opt_locations, opt_errorCallback);
	    var shaders = [];
	    for (var ii = 0; ii < shaderSources.length; ++ii) {
	      var shader = loadShader(gl, shaderSources[ii], gl[defaultShaderType[ii]], progOptions.errorCallback);
	      if (!shader) {
	        return null;
	      }
	      shaders.push(shader);
	    }
	    return createProgram(gl, shaders, progOptions);
	  }
Creates a program from 2 sources.

NOTE: There are 4 signatures for this function

    twgl.createProgramFromSource(gl, [vs, fs], opt_options);
    twgl.createProgramFromSource(gl, [vs, fs], opt_errFunc);
    twgl.createProgramFromSource(gl, [vs, fs], opt_attribs, opt_errFunc);
    twgl.createProgramFromSource(gl, [vs, fs], opt_attribs, opt_locations, opt_errFunc);

@param {WebGLRenderingContext} gl The WebGLRenderingContext
       to use.
@param {string[]} shaderSourcess Array of sources for the
       shaders. The first is assumed to be the vertex shader,
       the second the fragment shader.
@param {string[]} [opt_attribs] An array of attribs names. Locations will be assigned by index if not passed in
@param {number[]} [opt_locations] The locations for the. A parallel array to opt_attribs letting you assign locations.
@param {module:twgl.ErrorCallback} opt_errorCallback callback for errors. By default it just prints an error to the console
       on error. If you want something else pass an callback. It's passed an error message.
@return {WebGLProgram} The created program.
@memberOf module:twgl/programs