Add attribute functions and use these inside class

Add attribute functions similar to existing uniform
functions.
Rename uniform(...) to uniform_for_name(...).
Add uniform_for_index(...)
Add attributes(...)
Add attribute_for_name(...)
Add attribute_for_index(...)
Use these functions in our Uniforms and Attributes
classes.
Add numpy_dtype_to_enum.

Converts between 'int8' dtype values and GL enums
such as GL_BYTE.
Rework shader Uniforms and Attributes.

Uniforms are now simplified.
Setting Uniforms should be faster.
More comments.
More rad-ness.
Update examples to latest shader code.

Add some variation in shader usage to demonstrate
different methods.