Extend IRLandingPad to support arbitrary finally blocks.

Just laying down the ground work before fixing issue 426.
Issue #426 part 1. Wrap destructor calls of temporary variables in a try/finally expression.
Issue #426 part 2. Generate a try-finally block only if it is required
(i.e. there are actually some destructor calls that are needed to be put into finally)
Fixed issue #426 — dtor / destructor not called for (rvalue) struct used in opApply
Fixed cases where the destructor is called on an uninitialized temporary
Merge pull request #427 from AlexeyProkhin/issue426

Fixed issue #426 — dtor / destructor not called for (rvalue) struct used in opApply
Fix for LLVM 3.4
Introduce a debug info builder.

Moves all code from todebug into a new class.
Also caches the compilation unit in order to fix a LLVM 3.4 compile error.