Implement new way for accessing shader attributes:

Previously, I was looking for a way that the type checker would be able
to prevent accessing vertex attributes that didn't exist when writing
vertex shaders. That seems to be impossible without having absolutely
disgusting types that are unmanagable and inextensible. As a result we'll
settle for a half measure at first. We can parameterize the shaders to
typecheck against the vertex, but then we'll have to check that the attributes
line up in the shader at runtime.