Inlineable classes

This WiP PR will host the inlineable classes optimization. Follow up in the comments.
The idiomatic use of `tryOrRollback` is:
```scala
tryOrRollback { cancelFun =>
  // do something
} getOrElse {
  // do something else
}
```
The repetition seems odd only because it's visually close, but in fact they represent fairly different things. The case `Some` is: ok the class is inlineable, let's try to inline it, or fallback to a full construction. The case `Node` is: well, the class, is not inlineable, there's only one thing we can possibly do, i.e., a full construction.

Actually, now I realize it would even be better to put the `pretransformExprs(args)` inside the `case Some`, and use `transformExpr` directly in the `case None`.