Let there be light

And there was light!
For now there is no scene graph or property implementation, all lights are added in painter.cpp, check that out to see how you can add lights.
I understand this to result in a direct match for the shader structs?
In the shader a ```vec4``` is used for position, here a ```vec3``` - instead of using an explicit padding, which i try to avoid as much as possible, i would encode other single float values like ```dist``` and ```spotFalloffPower``` in the forth vec4 component. This reduces overall struct size and padding as well.
```
glm::vec4 m_position;
glm::vec4 m_direction3Dist1;
glm::vec4 m_intensity;
glm::vec4 m_falloff; // with x, y, z as const, lin., and quad. falloff, and w as falloff power
```
Further more try to avoid redundant naming - ```spotFalloffPower``` might be ```falloffPower``` in a struct named ```SpotLight```