Generalise support for LLVM IR metadata

- Add proper IrType and IrValue classes to represent LLVM IR metadata

- Add MetadataNameSource that serves a similar purpose to
  VariableNameSource for variables. This allows multiple users to
  allocate metadata names on the same module without explicitly
  cooperating

- Add MetadataDef to represent metadata definitions and a convenience
  method IrModuleBuilder.nameMetadataNode to give metadata nodes names

- Rename IrTbaaNode to TbaaMetadata and make it extend MetadataNode

- Update typegen and compiler to accomodate the llvmir changes
compiler: Pass typeId, gcState range info to LLVM

The compiler knows the valid ranges a type ID can take for a particular
datum cell based on the possibleValues set tracked through the planner.
It also knows that a program can only see a GC state of 0 or 1. Pass
these to LLVM so it can possibly optimise based off that information.

With -O2 on x86-64 this hasn't been observed to affect code generation.
However, it's a good test for generalised metadata support and it may
improve things in certain situations on or other architectures.