Code is somewhat optimized and now appears to work on matrices that aren't square. Documentation of methods is pretty much entirely wrong now.