Add asserts for invalid shader types, use a proper enum type, and move the number of shaders to not be a shader type.