TypeAssigner: fix return type of clone() for arrays
TypeAssigner: fix return type of clone() for arrays

Given the following code:
  val x: Array[String] = new Array[String](1)
  x(0) = "foo"
  println(x.clone().apply(0))

Before this commit, the last line was rewritten in Erasure to:
  println(x.clone().[]apply(0))
This is incorrect: clone() returns an Object, so a cast is necessary,
this resulted in the following failure at runtime:
  java.lang.VerifyError: Bad type on operand stack in aaload

After this commit, the last line is rewritten in Erasure to:
  println(x.clone().asInstanceOf[String[]].[]apply(0))
This corresponds to adding a "checkcast" instruction in the generated
bytecode, and is enough to fix the runtime error.

som-snytt/dotty,vsalvis/dotty,vsalvis/dotty,lampepfl/dotty,densh/dotty,lampepfl/dotty,lampepfl/dotty,spetz911/dotty,svalaskevicius/dotty,sjrd/dotty,auvik/dotty,som-snytt/dotty,reactormonk/dotty,yusuke2255/dotty,dotty-staging/dotty,VladimirNik/dotty,dotty-staging/dotty,lampepfl/dotty,angi2/dotty,svalaskevicius/dotty,som-snytt/dotty,som-snytt/dotty,folone/dotty,dotty-staging/dotty,dotty-staging/dotty,dotty-staging/dotty,folone/dotty,VladimirNik/dotty,sjrd/dotty,auvik/dotty,spetz911/dotty,reactormonk/dotty,sjrd/dotty,sjrd/dotty,som-snytt/dotty,sjrd/dotty,yusuke2255/dotty,angi2/dotty,densh/dotty,lampepfl/dotty