Simplify the code and enforce stricter rules.
Make if-checks asserts, because those cases are not expected anymore.
Make use of the new NDEBUG define. Offload the extra work only when in debug mode.
Simplify commitTransaction by moving the running of inits in the caller.

Temporarily we create a nested transaction instead of delegating that to the
caller to decide. This should be fixed soon.
There can be duplicates coming from HandleVTable interface.

It is possible to have duplicate calls to HandleVTable with the same
declaration, because each time Sema believes a vtable is used it emits
that callback.
For reference (clang::CodeGen::CodeGenModule::EmitVTable).
Remove unused code.
Add extra assert enforcing integrity.
Outline method.
Add default constructor and move the initialization in a separate routine.
Fix an issue with deleting the nested transaction marker. Improve style.
Sync names.
Add more brief transaction structure printout for debugging purposes.
Implement a transaction pool. This will help reusing empty transactions and reduce
the number of alocations.
Since we have the transaction pool we can afford to construct the decl collection non-lazy.
This is because we know that this will be reused.
Use the function that exists in the Interpreter class itself.
Separate concerns.
Add debugging printout.
Typo.
Use the transaction pool to reduce the number of transaction allocations.
Add extra assertions.
Simplify *a lot* the implementation.
Remove redundant transaction state.