Fix a bug in the GLSL120 shaders.

The shaders go sequentially through the light source array. But the enabled
lights aren't necessarily in front of the array, hence we can't just loop
over lightsNumber (number of enabled lights, e.g. 3). We have to loop through
all possible lights (max 8 in classic OpenGL), and check for each if it's in an
'enabled' uniform array filled in by the application. Otherwise, disabling a
light could also disable others in the way, or disable the wrong one.
Fix a bug in the GLSL330 shaders.

The light direction computation for directional lights was wrong. It was computed
as (vertex pos - light pos), instead of the... light direction. This bug was making
the directional light act as a plain, no-attenuated point light.

It wasn't detected in a long time though, as the combination of the tests' light's
position and orientation (unfortunately) made a correct lighting for the directional
light.

But moving the directional light revealed the bug, as the light effect orientation
changed, whereas the position of a directional light shouldn't affect it, given these
lights are supposed to be infinitely far away in a fixed direction.

To follow the old OpenGL system, the position of a directional light passed to the
shaders is actually the light direction. Though it may change in the future since
this can be rather confusing.
Fix some lighting issues.

In GLSL330: directional light and spot light directions were wrong.
A combination of unfortunate positions *and* orientations was making them appear
accurate during the tests, but changing their position and/or position proved them
wrong. The spot direction calculation was right for the default orientation, but
wrong otherwise.

Another bug was with GLSL120 shaders not passing through all possible lights. The
problem is that OpenGL lights don't have fixed IDs: they do not necessarily stay
in the same order when one disables/enables them, but are more likely to "roll"
in the gl_LightSource array. Since the shaders were sequentially processing only
the first "lightsNumber" (number of lights we want the shader to use) lights, this
resulted in lights surprisingly disabled when disabling another, and multiple
lights disabled at once. To fix this, introduce a "lightsEnabled" uniform
containing the IDs of all enabled lights. Shaders now loop through the entire
gl_LightSource array and compare the ID of each light with all the IDs in the
lightsEnabled array. It only adds the light color if its ID is in the array.

The shader part of these bugs has been fixed in previous commits and all should be
good now (let's hope so).

Create separated private functions setupFixedPipelineLights and
setupProgrammableRendererLights as the fixed pipeline needs a little more work now