nir: lowering shared memory derefs with nir_lower_io_explicit()
This adds shared memory support to nir_lower_io_explicit() and adds a pass, nir_lower_to_explicit(), which can be used to replace shared deref/var types with explicit types so that nir_lower_io_explicit() can be used instead of nir_lower_io() to lower shared derefs.
"nir/lower_io: don't use a deref's variable if it's supposed to be ignored" is a related fix.