lift the body of a lambda to a method in uncurry, expand the residual
lambda into an anonymous class later
Compare symbols instead of names in DeCapturifyTransformer

The DeCapturifyTransformer would fail to match `This` tree node
because it tried to compare names of qualifiers. However, names
can be mangled by flatten phase. This tranformation seems to be
not reflected in name stored in `This` node. Which is a bug in
flatten phase.

Comparing Symbols is usually more reliable.
Make sure that we use erased types and we add type ascription

Previously, abstractFunctionForFunctionType method was used
to lookup abstract function type corresponding to given
function type. However, that method returns applied (unerased)
type. We don't want that so we have to perform the lookup
ourselves.

Also, new expressions with anonymous classes as targets are best
type ascribed with type of their parent. We follow the logic of
uncurry with the difference that uncurry uses FunctionN type and
we are using AbstractFunctionN type.