trigger event when attenuation changes
cache max effective range for huge performance gains :)

especially for lights with very low but non-zero attenuation
PERF: use cached clear color to avoid forcing cpu/gpu sync

getParameter forces gpu to sync with gpu, wasting cycles.

Profile using getParameter had 60% time spent in #illuminate.
Profile using cached values has 80% time spent idle. :)