Fix some of the vector multiplication and divide routines.

In general, we want the scalar division of vectors and matrices to
have the matrix come first and the scalar come second. It doesn't make
sense to divide a scalar by a vector or to divide a matrix by a vector,
so these should now produce errors at compile time.

Also, make sure to add additional types that can be multiplied together
using the * operator. If we multiply two vectors together, that's a dot
product. The size restrictions should be enforced at compile time by the
template parameters for VectorBase<T, N>::Dot

In this way, we can support vector/matrix multiplication by retaining the
* operator as well.
Add initial matrix tests
Allow additional indexable types

Instead of using operator() to index into the second operand of the
VectorAddition function, use operator[]. This way we can add to pointers
and std::vector types as well.
Add power method iteration for square matrices
Add simple 4x4 matrix file
Stub out remaining tests
Add matrix multiplication test
Add matrix transpose
Constify
Add matrix multiplication infrastructure
Finish matrix unit tests