Add contracts to the constructors
Convert to using a multidimensional array
A simplification
Add a prototypical constructor

Can be used as in the following samples

auto m1 = [[1,2],[3,4]];
auto m2 = Matrix!int(m1);

auto m3 = Matrix!int([[1,2]]);