Typesafe Dense Matrix

The idea behind this object type is to give a simple wrapper around std::array and family,
to prevent invalid operations such as:
    Matrix<M,N> * Matrix<M,N>
the compiler should warn of such dangerous operations.

In the future, I will look into using dynamic arrays instead. This is just an experiment
with std::array to see what works internally.