Current functionality level:  ESSL 3.0

Error checking
  - compile-time check for static recursion
  - location layout range/overlap semantics

Performance

Testing
  - thread safety

Interfacing
  - finish putting into a glslang namespace

Functionality to Implement/Finish
    ESSL 3.0
      - "const" compile-time constant propagation in the front-end has to be complete, for all built-in functions
    GLSL 1.2
      - Handle multiple compilation units per stage
      - Allow initializers on uniform declarations.  The value is set at link time.
      - signature matching takes type conversions into account, ambiguity is an error
    GLSL 1.3
      . flat is for both user and predeclared built-in in/out variables
    GLSL 1.3 (Non-ES)
      - Preprocessor token pasting (##), ## does macro expansion after pasting not before
      - non-perspective (linear) interpolation (noperspective)
      - add gl_ClipDistance[] to both vertex and fragment shaders
      - only statically used built-ins have to be redeclared as flat
      - Link: Deprecated mixing fixed vertex/fragment stage with programmable fragment/vertex stage.
      - Deprecated gl_ClipVertex
      - deprecate almost all built-in state
      - ftransform() is deprecated
      - Deprecated built-in vertex inputs (attributes) and some outputs (varyings).
    GLSL 1.4 (Non-ES)
      - track as removed in this release, but present in others:
        - Use of gl_ClipVertex.  Use gl_ClipDistance instead.
        - Built-in vertex shader inputs.
        - Built-in uniforms except for depth range parameters
        - Built-in interface between vertex and fragment:  gl_TexCoord, gl_FogFragCoord, and all the color values.
        - Built-in two-sided coloring.
        - Fixed functionality for a programmable stage.  Supply shaders for all stages currently being used.
        - ftransform().  Use invariant outputs instead.
    GLSL 1.5 (Non-ES)
      - Deprecated gl_MaxVaryingComponents
      - Add new minimum maximums for gl_MaxVertexOutputComponents, gl_MaxGeometryInputComponents, gl_MaxGeometryOutputComponents, and gl_MaxFragmentInputComponents, 
                rather than relying on gl_MaxVaryingComponents.  Also, corrected gl_MaxVaryingComponents to be 60 instead of 64.
      - Added gl_PrimitiveID as an input to fragment shaders.
      - Added gl_FragCoord qualifiers origin_upper_left, and pixel_center_integer to modify the values returned by gl_FragCoord (and have no affect on any other aspect of the pipeline or language).
      - Added support for multi-sample textures through sampler2DMS and sampler2DMSArray support in texelFetch() and textureSize().
      - Broadened interface blocks from just uniforms to in and out interfaces as well.
      - Broaden array usage to include vertex shader inputs (vertex in).
      - Added geometry shaders.  This includes targeting layers in FBO rendering.
      - geometry shader layouts: they must be declared, telling the system the primitive input and output types and maximum number of vertices.
      - Added geometry shader constants.
      - gl_FragCoord qualifiers use the layout(): origin_upper_left and pixel_center_integer.
      - Broaden structure usage to include geometry inputs and geometry outputs.
    GLSL 4.0
    GLSL 4.1
    GLSL 4.2
    GLSL 4.3
    GLSL 4.4
