Allow SparseArrays to catch `lu(::WrappedSparseMatrix)` (#51161)
Over the `AbstractMatrix` relaxation in v1.9, we missed a potential
indirection for wrapped sparse matrices. Instead, by default, a
`similar` copy is created (hence a sparse matrix) and then `lu!` with a
pivot argument is called. Such a method, however, does not exist in
SparseArrays.jl, which means that the `generic_lufact!` method gets
called, which is probably really bad performance-wise, due to heavy
reading and writing into the sparse matrix. This PR introduces one more
level at which SparseArrays.jl (and perhaps other external packages) may
interfere and redirect to their own implementations, in-place or
out-of-place.