Started work on the material manager

|SOURCE|
[Common/Material]
* The primitive which holds material information (the hashes of the textures
  and shader used as well as the shader parameters)
* All materials need to be associated with the MaterialManager class to allow
  for textures and shaders to be loaded and managed
* CreateFromFile reads a material file, decomposing each element of the file to
  extract the shader source and texture files
* SetShaderParameter uses the requested parameter by name passed in along with
  the previously collected shader uniform names to determine if the parameter
  name is correct, then the pointer to the data is used with the shader
* GetHash returns the material's hash (FNV-1a), which is calculated in
  CreateFromFile
* GetShaderHash returns the shader's hash value
* GetTextureHashes returns a std::list of material hashes
[Common/MaterialManager]
* The Material Manager creates and destroys materials along with textures and
  shaders
* CreateMaterial loads the material from the requested file name and stores the
  hash in the hash parameter
* ApplyMaterial uses the hash passed in and compares it with the hash map in
  order to determine if it can be applied, a failure state is returned if it is
  not found, otherwise success is returned
* SetShaderParameter uses the hash to get the requested Material and uses the
  parameter name along with the pointer to the data to set the shdaer parameter
* CreateShader uses a MATERIAL_SHADER struct (which relies on the to-be-done
  Shader class) to create a shader and return a list of the shader parameters
  along with a shader hash
* LoadTexture loads a texture from file and returns the hash of the texture