nmf with tests

Added NMF algorithm and tests. Tests pass.
This will likely be useful elsewhere. We could make a RowMatrix.randomize() method that uses this trick to generate a random matrix derived from a RowMatrix.