Refactor shader source classes, in order to work around a Firefox bug.

The Firefox bug prevents shaders from compiling with the CORDIC algorithm, so we detect Firefox and fall back to the original algorithm.  Issue #2197.

The overall goal of the refactoring is to allow `#defines` to affect built-in functions, which was not possible before.  In order to do this, we need the `#defines` to appear at the top of the source, so I've merged the procedural shader generation previously done in `ShaderProgram` with the generation done in `createShaderSource`.

* `createShaderSource` (private) is removed and replaced by `ShaderSource`. `ShaderSource` now manages an array of `#defines`, concating source shaders, and automatically including built-in functions, keeping everything in the correct order.
* `ShaderCache` (and by extension `Context.createShaderProgram` and `Context.replaceShaderProgram`) now accept either `ShaderSource` objects, or a single string, for vertex and fragment shaders.
* `ShaderProgram` constructor (private) now takes an options object.  It also exposes the vertex and fragment shaders as `ShaderSource` objects instead of strings.  External code can still clone the `ShaderSources` and then screw around with the implementation to make new shaders procedurally, as `OIT` does.
I don't know how hard it would be to detect built-ins that are already present.  The current regex is very primitive and doesn't distinguish a usage from a declaration.  

The problem here is that are going from a `ShaderSource` to a string, which I only did because this public function documents its return type as String.  If it returned the object instead, there would be no need for the flag.

Alternatively, I could change this function to not use `ShaderSource` at all, and just concat the strings together manually.  Since the shader stuff is private, presumably that's what we would expect people to do for their own appearances.