Metadata

Alternative metadata design.

Firstly, I reworked the representation of metadata as it wasn't accurate to its syntax, scoping and semantics in LLVM. So the base metadata representation is much better now.

Secondly, I prefer not pulling metadata into LlvmVar. The only way metadata can be used that the original encoding didnt capture was as function arguments. I simply added a new `CallM` construct for a function call that can take metadata as arugments. I didn't modify the original `Call` constructor to do this as I don't want to modify all the current code to take a different argument type.

I think this design captures the semantics of how metadata can be used a lot clearer than pushing it into LlvmVar, since LlvmVar can be used _everywhere_ while metadata is only usable in a few specific situations.