% Circular dependency in closures

Creating the generic block of a closure type requires lifetime annotations
- So it's possible to know what generic lifetimes are used by the closure, and what locals are captured.

Lifetime inferrence needs static borrow constants to be done first, so the lifetimes there are good
- 

Closures are valid in static-promoted constants.
- The closure type doesn't get monomorphised (it can't really?)


Options:
>> Closure type includes a PathParams initialised to a no-op copy from the original scope
  - This can be done when the type is first initialised (in typecheck)
  - When the closure is replaced with its true type, this can be used to monomorphise from the original to new?
  - ISSUE: When a closure is extracted in SBC, its generics change from a mix of I/M into just M. That mapping cannot be applied to the various instances around. The issue is the node changing, not the type leaking and needing to be monomorphised.
>> Maybe I can leave a tag on the borrow node that indicates that it's static? And then use a second pass to make the actual static?
  - Instead of making closure expansion two-phase, make SBC two-phase. First pass tags static borrows, and second pass extracts/replaces them.
  - One small change to lifetime_infer to make it treat a borrow with this tag as `&'static` even if its body isn't.