Refactored program.py and program_inputs.py
This fixes a bug that assumed that uniform index and location
are equal, which is not the case on all drivers. It also makes
the separation between ShaderProgram and the handling of
inputs (uniforms and attributes) more clear.