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
You're right it's not exactly descriptive is it. I'll call it `attributes` for now. I'm planning on adding more too it that might make that as wrong later on. It can be renamed when I do that though, for now it's perfectly accurate.