Draft: CL: Printf updates for upstream
This moves the lowering pass to general nir, and fixes an uninitialized memory bug. The general pass is pretty much identical, but instead of taking a binding, returns the variable so we can update the binding afterwards. It also supports arbitrary-sized string identifiers, instead of just the 64-bit pointer we're using.