Rework accumulation splitting
Make splitting more flexible and allow the following use cases:
-
Sumfact: Do as before. Split between gradients and non-gradients and cut test functions from the expression. This gives suitable input for stage 3 of sumfactiorization.
-
Non-sumfact: Do not split between gradients and non-gradients and do not cut test functionts form the expression. This simplifies the accumulation generation and avoids unnecessary accumulate calls.
As a side effect the whole dimension indices handling got a bit cleaner.
I had to add an additional ufl transformation that makes sure that there is never a ReferenceGrad node below a PositiveRestricted/NegativeRestricted node.