Adding VARGS support for custom backend

If you just want them to work, you can use a void * lowering via [RFC] Desugar variadics. Codegen for new targets, optimisation for existing provided by @JonChesterfield. That skips the backend by just doing the lowering in LLVM-IR, that’s what we use for the GPU targets currently.