Optimize rendering: reuse locations, vertex array
Optimize rendering: reuse locations, vertex array

* Locations are a string to int lookup, and are calculated per shader
  program. I had been calculating per frame. I don't know if this
  matters much.
* The vertex array can be reused from frame to frame. I fill it again
  each frame but even that can be optimized further.

redblobgames/helloworld-sdl2-opengl-emscripten,redblobgames/helloworld-sdl2-opengl-emscripten,redblobgames/helloworld-sdl2-opengl-emscripten