We now optimize using separate node transformation objects, in all cases.

This allows decoupling, but also, an optimization can now replace the object it triggered on without danger.