Do not push negation down when infix operands are not boolean expressions
Fixed bad interaction between several refactorings:
A refactoring removed some nodes, but let other refactorings visit the removed nodes and the latter applied changes to them.
In the end, some expressions where missing from the final code.

The fix is that refactorings that remove nodes must forbid other refactorings from visiting them.
Introduced AbstractRefactoring class.
It contains all shared features.
Made all refactoring rules extend it.