TODO: - Audit TODOs in codebase - Test compile against a no_std program - MIR Optimisations - HIR Optimisation (remove dead code in `if true/if false` branches) - Convert enum variants to point to structs for the data type - Clean up Span code to correctly handle nested spans - Clean up AST - Explit arg patterns and arg types up for cleaner serialisation