I am still not sure whether to make Matrix and Vector value types. Pros: when, say, iterating the rows of a large matrix, this would avoid intermediate allocations.
Cons: each assignment can unexpectedly result in a copy. One can explicitly use `ref Vector` and so on to avoid copies, but then the result of linear algebra operations would not be references and it would become difficult to avoid copies I am open to suggestions
