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.
sort requires
remove unused modules
fix typo
Fix custom property entity compositing

Calling `addProperty` on an existing entity would not be reflected in
existing composited versions of that entity.
Remove unused modules
Changes after review.
Merge remote-tracking branch 'origin/master' into workAroundFirefoxCrash
Fix after merge.
Merge pull request #2214 from AnalyticalGraphicsInc/workAroundFirefoxCrash

Refactor shader source classes, in order to work around a Firefox bug.
Merge pull request #2216 from AnalyticalGraphicsInc/issue2209

Fix custom property entity compositing
Update CHANGES about #2197
Fix GlobeSurfaceTile.pick when mesh includes normals.

Fixes #2219.
Update CHANGES.md and add a test.
Tweak CHANGES.md
Merge pull request #2221 from AnalyticalGraphicsInc/fixTerrainPickingWithNormals

Fix picking of terrain with normals.
Merge remote-tracking branch 'origin/master' into how-did-we-never-notice-this