for null outer pointer, NPE via throw null

As per the JVM spec, the athrow instruction throws a NullPointerException upon finding null on stack top.
This commit takes advantage of that feature, to emit more compact code.

The constructor of an inner class that receives an outer value first checks that value for nullness, depending on which NPE may be thrown.
The code now emitted to achieve the above looks like:

    0: aload_1
    1: ifnonnull     6
    4: aconst_null
    5: athrow
    6: ...
avoids multiple evals of isSubClass DelayedInitClass
translation for DelayedInit keeps more code in original class

As before, the translation for DelayedInit creates a closure-class.
With this commit, its apply() method now just delegates to a synthetic method (in the original class) that contains the statements whose execution is to be delayed.

Previously the closure body would have the statements in question transplanted into it, so to say, which in turn required creating accessors in the original class, as well as reformulating accesses-on-this into accesses-via-outer.

Details about the mechanics of the rewriting can be found in the source comment for delayedEndpointDef()
improved naming of variables in constructors phase
deprecation cycle for definitions.NPEConstructor
Merge pull request #2445 from magarciaEPFL/backendish3

improvements, constructors phase (2nd attempt)