util: Fix quiet NaN generation in float/half conversions (both ways)
Replacement for !16228 (closed), finishing off the fixes and adding unit tests.
All of this is to fix dEQP-VK.spirv_assembly.instruction.compute.float_controls.fp16.generated_args.denorm_nmin_nan_flush_to_zero_nostorage
and friends on turnip (since x86 uses the HW instructions instead) with clang at typical optimization levels.