SI-7397 bug with null.asInstanceOf[type].

Erasure's tree handling would miss literal null being
cast to a particular type, and the null would make it to
the backend, which in the case of an expression like

  Option(null.asInstanceOf[Boolean])

would leave one with a boxed null instead of a boxed false.

[but then...]

Nightmarishly, it turns out specialization depends on the current behavior. Say
you have a specialized class like this:

class Klass[@specialized(Long) A]( val a: A )

The Long-specialized subclass has to call the generic Klass constructor with
some kind of argument. It currently passes null, which is passed through
untouched where it lies unseen because the field is inaccessible, as all means
of accessing it have been overridden to point to the specialized field in
Klass$mcJ$sp.

After I teach erasure that null.asInstanceOf[Long] means it's a Long, the lesson
is taken too well: no longer is the null passed through untouched, because it's
a Long. And since the eventual destination is a generic field, it is boxed into
a java.lang.Long before being placed there.

Spelled in diff form:

 diff --git a/Klass$mcJ$sp.class b/Klass$mcJ$sp.class
 index 6af6c5282c..2d7f69c300 100644
 --- a/Klass$mcJ$sp.class
 +++ b/Klass$mcJ$sp.class
 @@ -34,7 +34,7 @@ public class Klass$mcJ$sp extends Klass<java.lang.Object> {
      Code:
          : lload_1
          : putfield      #                  // Field a$mcJ$sp:J
 -        : aconst_null
 -        : invokespecial #                  // Method Klass."<init>":(Ljava/lang/Object;)V
 +        : invokestatic  #                  // Method scala/runtime/BoxesRunTime.boxToLong:(J)Ljava/lang/Long;
 +       : invokespecial #                  // Method Klass."<init>":(Ljava/lang/Object;)V
         : return
  }