Use a separate context for generating each module
Use LLVM named struct types for arrays
VirtualFunctionHandler: Use raw strings correctly
Fix infinite loop in cycle checker
Make running passes more flexible with PassManager

This allows TypeDefinitions to be added mid-pass, so that in a future
commit, bitcode files which are loaded during resolution can have all of
the passes run on them properly (since right now they are broken).
Fix an error with using types loaded from bitcode

Previously, a type loaded from bitcode only had the first
top-level-types resolution pass run on it, which meant that it never got
a linearisation, and so resolving its members would cause a
NullPointerException.

Now, the PassManager brings each imported bitcode file up to speed as
they are loaded, so that they can instantly be used to the same extent
as any bitcode file specified on the command line.
Fix super-VFT initialisation for top level classes
Allow multiple errors to be output in a single run

This adds a CoalescedConceptualException, which stores multiple
ConceptualExceptions until they all need to be thrown.

This patch required major changes to several passes, to allow enough
Exception caching to be useful, without creating a situation that could
cause NullPointerExceptions. To ensure this, we stop running passes as
soon as a single pass throws an error. We also make sure that passes do
not continue once an unrecoverable error has been detected (e.g. trying
to resolve a function call when its arguments do not type-check, or
trying to type-check something which has failed to resolve).

Because of this, TypeDefinitions loaded from metadata must be discarded
if they cannot immediately be brought up to speed with the current pass,
or they could cause NullPointerExceptions later on in resolution when
something else tries to resolve to the same TypeDefinition.