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 
Wait, are these really distinct concepts deserving of separate terms?

I.e., from the explanation here, I see these two concepts as the same thing: when you have some structure with internal bindings, and you want to talk about the substructures held within it, you are going to encounter variable references that are bound w.r.t. the overall structure but are free w.r.t. the particular substructure.

The only difference I can see in this case is in one case the structure in question is the structure of a type, and in another case, the structure is that of terms (i.e. fn definitions).

I do know that `FreeRegion` is actually a concrete struct type in the compiler, so maybe that is what is motivating you to use a different term here...