don't replace shaders on duplicate setup() call

fixes #408
refactor vao object to use acutal OpenGL IDs rather than object pointers
base static vertexbuffer on buffer object