nir/lower_io_to_vector: add flat mode

This has lower_io_to_vector try to turn variables into arrays of 4-sized
vectors when possible and fall back to the old approach when that isn't
possible.

This is so that lower_io_to_vector can guarantee that only one variable is
used for each fragment shader output.

v2: handle dual-source blending
v3: don't try to merge structs and non-32-bit types in get_flat_type()
v3: fix per-vertex inputs
v3: fix and cleanup location advancement in get_flat_type() and it's
    calling code
v4: prioritize the original mode over the flat mode
v4: don't create flat variables to merge only one variable

Signed-off-by: Rhys Perry <pendingchaos02@gmail.com>
10 jobs for !1238 with nir_lower_io_to_vector in 25 minutes and 58 seconds (queued for 7 seconds)
detached
Status Job ID Name Coverage
  Containers Build
passed #454109
debian

00:00:25

 
  Build+Test
passed #454111
meson-clang

00:08:44

passed #454115
meson-clover

00:08:51

passed #454114
meson-main

00:08:56

passed #454110
meson-swr-glvnd

00:07:13

passed #454116
meson-vulkan

00:03:22

passed #454118
scons-llvm

00:05:13

passed #454117
scons-nollvm

00:07:01

passed #454112
scons-swr

00:06:51

passed #454113
scons-win64

00:10:19