ShaderProgram requires list of attributes now.

It also remembers the indices for attributes it has bound.