ENH reproducible scipy.sparse.rand

Added a `random_state` argument on `scipy.sparse.rand`, to make it more useful in reproducible unit tests. The name of the argument follows scikit-learn conventions; I wasn't aware of a SciPy convention on naming these things.

Also renamed the `id` variable to `ind` (`id` is the name of a Python built-in!) and `tp` to `typ` for readability; and changed the index type to `np.intc` since `np.intp` will allow sizes that are much too large and trigger cryptic error messages (but see #442, which may have to change this back).