local common subexpression elimination

Still missing:
* many  many tests!
* I guess we need fixpoint iteration even for this one?
maybe choose a more significant name