Couple of things becoming clear while writing the paper and getting more benchmarks to pass:
ProgWrapper and ProgTuple don't need to be separate. They can be merged into an abstract program that has other abstract programs, the branch and the environment.
Make objects immutable - this will increase memory usage but make things functional and easy to reason about
Couple of things becoming clear while writing the paper and getting more benchmarks to pass: