Full effect system with examples, detailed comments and non-blocking
keyboard controller.

EffectManager now registers Effects using static factory methods instead
of keeping an instance of each class.

JellyEffect is the new baseclass that all our effects derive from.  It
provides controller access and a placeholder for additional future
shared code.

IState is gone and replaces with a low-level IController that represents
a controlbox with both digital and analog channels.  

KeyboardController realizes IController for easy testing by allowing
non-blocking short commands such as "A1" for pressing the first button,
or "c25" for setting the the third analog controller to 25%.