DO NOT MERGE Incremental inliner

**Do not merge this PR yet**, it is obviously in a very rough state.

But now the algorithm should be complete enough that things won't change much anymore, except cleanups. So I'm posting it for the eager interested reader.
I avoided `getOrElse` because I'm mutating the `var returnLabel` from within the `else` block. I can use `getOrElse` if you prefer. In some way, this is a `getOrElseUpdate` on a mutable `Option` ^^