Set the method indices when loading from bitcode

Previously, they were not set, which defaulted them to zero, which would
cause the wrong method calls to be generated.
Add try/catch/finally statements

The most complicated part of this is the control flow. Every terminating
statement needs to ensure that it abides by the finally blocks it is
enclosed inside.
For throw statements, this just amounts to knowing which landing pad to
unwind to, which is trivial.
However, break, continue, and return statements must have a stack of
finally blocks to process in order before their destination is reached.
In some cases, the finally block stops execution, meaning that the
break/continue/return in question never gets to its destination.

As well as this, the control flow checking for a finally block has to
account for exceptions being thrown at all possible points inside the
corresponding try/catch blocks. This required adding a new
'terminatedVariables' variable state to the control flow checker's
state.

Another minor change is that pure RTTI is now stored in global variables
for every type, rather than being looked up inside the instance RTTI
block for all types but interfaces. This is because catch clauses
require global variables for RTTI in LLVM.