Singular value decomposition

- Two algorithms, one direct, another using EM that scales better when
both dimensions are large
- Added tests for the SVD on random matrices