Switch from a single tick method to multiple tickers

The pul request switches the API from having subclasses of Preset override the tick() function, to having them register an arbitrary number of "tick" functions (called "tickers"), which yield (light, color) pairs. This allows us to provide common effects (such as fading and flashing) as functions that return tickers, and to use function composition to modify ticker to run slower/faster or with an offset.