Glsl function - add ModularProgram

Personally I think it helps to have more complete `main` functions written out so that others can get a stronger sense of how the shader works. It's a bit more difficult when you have to dig through the python to see what the shader structure is. Imagine how we will adapt this code: https://github.com/vispy/experimental/blob/master/cr_paths/path.vert