Swap rows i and j in a dense matrix.
Implemented with Vector.swap, which updates the dense backing store in place
when M is uniquely referenced, rather than reading both rows and writing them
back through two sets (which forces a copy of the outer vector).