I want to perform in-place matrix multiplications where the matrices can be sparse or dense. As a simple case, consider evaluating residuals from a regression model

```
resid .= y - X*β
```

where `resid`

is a pre-allocated dense vector, `y`

and `β`

are both dense vectors, and `X`

is a `StridedArray`

or a `SparseMatrixCSC`

.

For the sparse `X`

I can call

```
A_mul_B!(-1, X, β, 1, copy!(resid, y))
```

but that is not defined for dense `X`

. I can drop down to `BLAS.gemv!`

or `BLAS.gemm!`

for the dense case but I would prefer a method call that applies to both sparse and dense and doesn’t cause allocation or introduce inefficiencies. I would also prefer syntax that applies to both v0.5 and v0.6