Made it so that objects can be rendered using different program objects (different sets of shaders). ProgramState.h no longer includes the 'program' member, as there is no longer any global program object. Instead, it now keeps track of all new program objects that are made. Other files were corrected to accomodate for this change. The PerlinHeightmapObject class was modified so that noiseutils is no longer needed. Instead, there is now support for multiple textures, and the landscape (a PerlinHeightmapObject) is rendered with multiple textures. Texture used at a fragment depends on the steeepness at that location of the landscape. Normal calculations are fixed for all HeightmapObjects.