BUG: sparse: allow operator overloading

New take on #3580 with fewer changes than #3584. In particular, does not implement element-wise division of sparse matrices, which needs more work than I'm able to put in right now.