Abstracted attribute setting in ShaderProgram

ShaderProgram is now properly multipurpose.
formatting