llvmir: Allow instruction results in predefed vars

Instead of always allocating a new variable with the given base name
allow callers to pass in a predefined variable. This is implemented by a
new ResultDestination type class with two members: AutoNamedVariable and
PredefinedVariable
Implement our own shadowstack

Instead of using LLVM's builtin GC support switch to our own shadow
stack implementation. This is mainly done so we can have a thread safe
shadow stack by moving the stack head to the World pointer. This will
also possibly make continuations easier later on.

In the distant future we'll probably need to switch back to LLVM's GC
with a custom GC plugin. However, that will complicate our build process
even further.