ENH: add matrix_rank

The `numpy.linalg.matrix_rank` uses `numpy.linalg.svd`.  This PR copypastes that function into scipy as `scipy.linalg.matrix_rank` using `scipy.linalg.svd`.

As evidence for demand for this kind of thing, see for example
https://github.com/nipy/nipy/blob/master/nipy/algorithms/utils/matrices.py

This PR also removes some redundant input checks from some `scipy.linalg` functions.