Shader Attributes and required refactoring

This commit is mostly a refactoring on the way to the next big OpenGL 3.x bump I'm working towards.

It switches us over to using some attributes for vertex inputs, then changes the shaders and required data inputs to match.

Nothing should be any different visually only in the way that it's implemented in the backend/renderer.

Andy