MAINT: avoid redundant copies in scipy.sparse

This is a rewrite of https://github.com/scipy/scipy/pull/4235 using the `copy=False` keyword argument of `astype` instead of writing and using a new helper function.

closes https://github.com/scipy/scipy/issues/4203