Terrain

There are three major parts to this:
* A significant refactoring of the terrain/imagery loading system, making it easier to understand, easier to add terrain providers, and probably less buggy.
* Lots of changes in ShaderProgram and UniformState and the like to support lighting 2D and Columbus View as if they're 3D.  The overall goal is to make 2D and Columbus View look just like 3D, except the Earth is a plane instead of a globe.  The water rendering is part of this, sort of.
* Terrain providers, so we can get real, actual terrain in Cesium.

I still need to write some additional tests, which I'll do Monday, and maybe some other odds and ends as well, but I'm opening this now so @pjcozzi can start taking a look this weekend.