Allow some nested inlinings for inlineable classes.

When calling a method on an inlined class instance, the method
is not only identified by its owner and name, but also by the
allocation site of the receiver. This allows some more inlinings
of statically nested uses of inlineable classes.
Optimize Closures directly, rather than AnonFunctions.

AnonFunctions are now simply regular inlineable classes.
Closures are directly optimized as TentativeClosureReplacements,
even when they are not the parameter of a new AnonFunction.

This simplifies the optimizer, notably because it does not need
to know about tricky @specialized apply methods.

It also makes it more powerful: js.Functions can be closure-eliminated
just as well as scala.Functions. Even for scala.Functions, it can
do a better job if the function is applied more than once: the
AnonFunction can still be inlined away, leaving only a JavaScript
function with monomorphic dispatch, which the JS VM should be able
to deal with.
Merge pull request #1176 from sjrd/opt-closures-directly

Optimize Closures directly, rather than AnonFunctions.