Pass in codegen as an entity to be recovered.
80 cols
Improve consistency. IncrementalExecutor should use llvm by default.
Remove @_GLOBAL__I_a and @__cxx_global_var_init after running them.
Since we append the extracted decls in the transaction the wrapper must go last.

The reason is it introduces a fake dependency with which the unloaded chokes up.
Pass in codegen.
Remove the members first, because they might need the redecl chain.
Add a dead code removal pass. The test is expected to succeed now.

Removing a GlobalValue from the module might make other values (referenced only
by the one being removed) available for removal. Those should go as well. The
initial implementation is a bit greedy - it removes more: i.e dtors because they
are not referenced (because IncrementalExecutor takes care of them in an custom
way)
Invert order, because Dtor_Base calls Dtor_complete.
Collect properly the references and remove orphaned globals due to death of a GV.

Cleanup and optimize the code.
Reduce the noise in compareState.
Remove dead code.
Use runFunction for running inits. Let's see whether it imporves LHCb builds
Remove unused var.
Style consistency.
Make it power of 2.
Protect against calling a function with an unexpected signature.
Remove the functions after the loop is done.
We may not have code gen.
We may not have incr executor.