SI-8575 Prevent AbstractMethodError caused by type alias

For some reason, erasure will not create the bridge method for consume in the situation below.

~~~scala
  type F = A with B
  type X = E[F with C]
  def consume(x: X): Unit
~~~

When the method consume is defined in a subclass but called in the super class (using the generated bridge) an AbstractMethodError is triggered.

This appears to be only the case if `X` is aliased to an applied type constructor with the argument being a compound type as above.

Since manually deliasing `F` to `A with B` does work, the solution appears to be to dealias components of compound types. However, dealiasing must not be performed on `AnyRef`, which would result in Object and thus break tests.

This might change the binary interface of the generated code to a theoretically equivalent one. But who knows whether this is equivalent enough.

Review by @adriaanm and @dragos 
Agreed. The explanation was only in commit msgs. and was insufficient.

I'm more interesting in why dealias shouldn't be there, though — that's the thing which worried me more.

> I'm sorry if you find this hostile to new contributors but a) they don't pay me enough to be nurturing and b) even if they did, I would still fight tooth and nail against this kind of corruption of the codebase.

I appreciate that and your review, and we'll both be more careful next time. But our common goals depend on welcoming good contributors (and keeping out the bad ones).