Got the basics of the input layou qualifiers working
The core translation functions and macros had gotten too hairy so
they have been rewritten.

The code layout still needs massive work, but the functionality is
much better now. I even have in-var structs which are totally
impossible in standard glsl.

It works by looking at the struct definition and making variables
to represent the slot, it then adds functions that mirror the ones
the real struct uses so that when ever you are refering to the in-var
it writes the slot variable name rather than a member form a.b.

So for this struct and shader:

(vdefstruct jam
   (pos :vec3)
   (col :vec4))

(defshader :!test! :vertex :330 ((inbound jam) (test :mat4))
   (out position (jam-pos inbound)))

You get the following:

#version 330

layout(location=0) in VEC3 _f_INBOUND_POS
layout(location=1) in VEC4 _f_INBOUND_COL
layout(location=2) in MAT4 TEST

out VEC3 POSITION;
VOID MAIN() {
    POSITION = _f_INBOUND_POS;
}

Which is pretty awesome!

Ok, lets get some more done!