It was a type parameter in disguise after all
Allow safe recursive calls in CEGIS

Introduces terminates(f(..)) witnesses in the spec, used to generate
safe recursive calls.

After a split i.e. on a List with Cons, the witness becomes

terminates(f(.., Cons(h, t), ..))

at which point we know that calling f(.., t, ..) is safe
termination-wise.
Refactoring phase

From a given implementation, we generate tests + verify it. We then try
to refactor (or repair if verification failed) by invoking synthesis on
the spec + tests.
Guiding witness function

Introduces a guiding witness, indicating what the original solution was.
This original solution is then either

1) tried as potential solution (verification)
2) used as decomposition, for instance on If expressions.
Decomp by match
Handle Match splitting by substitutions to allow terminating to work
Regroup grammars from Tegis and Cegis under one roof
Refactor TEGIS/CEGIS grammars

 - Some engineering fixes here and there
 - Make sure we remove witnesses before sending out to solver
 - Speed-up CEGIS:
   - Order tests based on likelihood to falsify input
   - Only assert wrongPrograms (C-Ex) when necessary
Fix/complicate HeapSort benchmarks
Generators from subexpressions with placeholders
Fix bug in CEGIS

+ various fixes for repair
Split CEGIS, allow other grammars, abstract away grammar
Swallow subexpression generator with exactly 1 placeholder
SimilarTo should not traverse exprs binding variables
Introduce RepairHole

- evaluate it to simplest value
- solve it to arbitrary value
- Use within CEGLESS as bank of exprs
- Avoid GuidedCloser if non-det expr (contains choose, holes, ..)
tee should not catch signals
Cost Distributions become Histograms
ADTSplit should not care about witnesses
Two more benchmarks
Fix typo