Inlineable classes

This WiP PR will host the inlineable classes optimization. Follow up in the comments.
I don't think you'll need to do that. We could have strange sub typing happening here (depending on what if's exactly allow). Consider:

```scala
class A(val x: Int)
class B(x: Int, val y: Int) extends A(x)

val obj = if (<cond>) new A(1) else new B(1,2)
obj.x
```

we theoretically could inline this, right?