nir: add the core datastructures

This includes all the instructions, ifs, loops, functions, etc. This is
similar to the information in ir.h.
nir: add core helper functions

These include functions for adding and removing various bits of IR and
helpers for iterating over all the sources and destinations of an
instruction. This is similar to ir.cpp.
nir: add a printer

This is similar to ir_print_visitor.cpp.
nir: add a validation pass

This is similar to ir_validate.cpp.
nir: add a glsl-to-nir pass
nir: add a pass to lower variables for scalar backends
nir: add a pass to remove unused variables

After we lower variables, we want to delete them in order to free up
some memory.
nir: add a pass to lower sampler instructions
nir: add a pass to lower system value reads
nir: add a pass to lower atomics
nir: add an optimization to turn global registers into local registers

After linking and inlining, this allows us to convert these registers
into SSA values and optimise more code.
nir: calculate dominance information
nir: add a pass to convert to SSA
nir: add an SSA-based copy propagation pass
nir: add an SSA-based dead code elimination pass
nir: keep track of the number of input, output, and uniform slots