refactor program/shader/variables into separate Glsl.Program class