I think this method needs exactly the same signature as the trace method would have on the Matrix2 trait.

we don't need `=:=[R,C]` here, do we? With ev1, we know that we have:
`l: Matrix2[R, C, V] * r: Matrix2[C, R, V] = Matrix2[R, R, V]`

But the trace idenitity we are using says we could also reverse the order:
`r: Matrix2[C, R, V] * l: Matrix2[R, C, V] = Matrix2[C, C, V]`
which do give different matrices, but as long as we sum both on the diagonal, we should get the same result.

We do need to be careful about which Ordering to use for equality when implementing the trace, and we may not be able to call `better.trace`, we may need to actually call toTypedPipe and do the filter here.

Lastly, for a product, we want to filter the outerSum before the grouping for the final sum. This will save a ton of work since the vast majority of the data won't pass that filter, and lastly, if we just do one sum, that sum can be very effectively partially executed on the mappers.