Adds Registry::Shader and Engine::Shader.

The shader engine can build shaders given a set of video settings and a
shader description. It will eventually negotiate shader version
information and build efficient shaders given a program's dependencies.

I will then have a Registry::Program and have the Shader Engine create
programs and attach them to renderable objects.

It will need to decide if it should select code paths through boolean
uniforms or whether it should compile separate programs for each
renderable as needs differ. It can do both fairly easily.