codegen: use var_arg functions everywhere

Unfortunately, LLVM does not implement va_arg for x86, so we have to
generate the code for it by hand. We should eventually get rid of the C
bindings for functions that can be implemented in LLVM.