shader: adding function to generate cache string
adding shaderparser for dealing with source
shaderparser: rudimentary support for defines
shaderparser: adding defines for the type of shader it is currently processing.

Hopefully this works on ATI as well, but I have a vague memory that nothing may appear before #version on ATI.
shaderparser: validate version is first line
shader: adding constructor which takes MacroTable