Promote long-term numerical stability. No more "time"

Instead of keeping track of one global time value, use multiple bounded low-frequency oscillators. This will keep working for an unlimited amount of time.
Unify 2D and 3D versions of "rings", add finer-grained early exit
Fix color contrast calculations
Move interesting effects into reusable headers
Dot: Filename to constructor arg
Rename effects for consistency
Fix brightness scaling in Rings when rendering pauses
EffectRunner: More modular argument parsing & main loop
EffectMixer example