Transform/extension methods

New phase ported: extension methods
Because idempotent is wrong, semantically. Only pure statements can be dropped.