Changed the way shader registration is handled and maps use pointers

|SOURCE|
[Common/MaterialManager]
* Added a MATERIAL_SHADER struct to handle passing data for the shader to the
  MaterialManager
* Changed the Material and Shader maps to use pointers to shaders and materials
  which allows for the manager to delete the shaders when necessary
* Added CreateShader, which uses the MATERIAL_SHADER struct to create a new
  shader, if the shader already exists, it is deleted
[Common/Memory]
* Added SafeDelete, which deletes the memory in use by a regular pointer
[Common/Shader]
* Added SHADER_TYPE_NONE for the SHADER_TYPE enum
* Added a logical assign-OR for the SHADER_TYPE enum
[common/Material]
* CreateFromFile uses the MATERIAL_SHADER instead of a Shader object to create
  a new shader, the struct is passed into the MaterialManager where the
  MD5 for the shader is calculated