Rename 'op' and 'recreate' names to 'func' and 'rebuild'
Correct test_non_commutative_order()
Only rebuild subexpressions which are modified changed