Eta-expanding a tree means converting a method reference to a function value.
Lift out function prefix and all arguments from application
pre.f(arg1, ..., argN) becomes
val x0 = pre val x1 = arg1 ... val xN = argN x0.f(x1, ..., xN)
But leave idempotent expressions alone.
Lift a function argument, stripping any NamedArg wrapper
Lift arguments that are not-idempotent into ValDefs in buffer
and replace by the idents of so created ValDefs.
Lift out common part of lhs tree taking part in an operator assignment such as
lhs += expr