Refactor WebGL shaders

This PR brings a number of infrastructure and performance improvements related to WebGL shaders. In brief:

 * The shader template has been refactored to support either a single or multiple shaders in the same namespace.
 * Uniform and attribute location management is more automated.
 * As a demonstration of multiple shaders and shader switching, the WebGL map renderer now uses a simpler, faster fragment shader that skips the per-fragment color matrix multiplication when the color manipulation is the identity operation.