Switch to debruijn indices, genericize sub/lub/glb

More refactoring in support of HRTB. There should be no change in functionality from these changes.

r? @pnkfelix 
I debated this question for a while ("are escaping regions a distinct concept from free regions?"). I think the answer is both yes and no. That is, in principle, they are not, but in practice, they are. Basically, in the compiler, whenever you "unbind" a bound region, either by entering the scope of the fn, or during the sub/lub/glb process, there is a certain amount of "procedure" you have to do (e.g., typically, replace that bound region with a skolemized/fresh one of some kind). Escaping regions represent bound regions where that procedure has not been done. This is a useful distinction to draw because it allows for correctness assertions as well as efficiency checks, if nothing else.