Generalised substitution infrastructure to work over an applicative and use a Rebuildable type class.

- Enables strengthening
- Rebuilding operations (weaken, strengthen, inline) will now work over all things we want to apply them to.
WIP Vectorisation now works

- Needs some cleanup and performance testing.