Some corrections to CookTorranceMaterial.
Matrix operations computed in row-major order

Matrix operations (times, plus, minus) were being computed in row-major
order, but being returned in column-major order, effectively transposing
the result.
Add MatrixBuffer to store Matrix elements

Rather than having Matrix directly maintain the backing array and
offsets/strides, we extract this responsibility to a MatrixBuffer class,
which effectively acts as a mutable Matrix.  In this way, we now have a
class that supports the operations of a Matrix but allow for in-place
computations, while maintaining immutability of the Matrix class (at
least, when the instance's underlying MatrixBuffer is not available).
Add in-place methods for Matrix operations
More compact storage for identity matrices