Fix support for sparse dots in algebraic simplifier, add more tests.
Fix support for sparse dots in algebraic simplifier, add more tests.

All the uses of `CreateDot` and `MakeDotHlo` should either support sparse dots (i.e. pass down "sparsity" and "sparse_meta" arguments), or skip sparse dots. Failure to do so would result in compilation errors when sparse dots are encountered.
Some support was introduced previously, but not all the uses were covered, and some of the tests were missing.

Detailed list of changes:
1) Skip the dots where both operands are transposed - as removing the transposes requires swapping the operands, and sparse dot implementation only supports sparsity on the LHS operand (nVidia hardware restriction).
2) Skip the optimization for sparse dot of concat, gather, and transpose/reshape - those operate only on constants, so have limited applicability.
3) Add support for sparse dots for eliminating reduction of batch dimensions.
4) Add previously missing tests for associative reordering of sparse dots.
