Optimizations to Materials and Shaders

We now have a runtime material - DisplayMaterial - that is a property
of the DisplayMesh.  Additionally, we don’t assign a new material to
the Shader if the previous material was the same.  This should speed up
instance rendering.
Merge branch 'MaterialOptimizations'