Two issues:
- Results are now consistent: since `cse([x - z, y - z])` returns `[(x0, -z)], [x + x0, x0 + y]` (both in previous and new CSE implementations), such replacement must also appear in `cse([(x - z)*(y - z), x - z, y - z])`; (Arguable unoptimized transformation from `[x - z, y - z]` to `[(x0, -z)], [x + x0, x0 + y]` may be handled by future consistent optimizations.)
- Intermediate variables order are now dependent on their appearance in expressions list (this is a side effect of new implementation, not necessarily bad).