anchor.diff:  objects into appropriate DMX channel values for the target that is being
   assigned.
   
  -7.  Finally, the resulting buffers of DMX values, with zeros in any
  +. Finally, the resulting buffers of DMX values, with zeros in any
   channels which were not affected by assigners, are sent to their
   corresponding universes, causing the lights to produce the desired
   effects.
  
positive.code: thing. If the effect doesn’t want to do anything this frame, it can
  simply return an empty assigner list.
  
  5.  Once all the assigners have been collected, Each assigner’s
  http://deepsymmetry.org/afterglow/doc/afterglow.effects.html#var-assign[assign]
  function is called, again passing in the show and the metronome
  snapshot, the target which is being assigned (a DMX channel in a show
  
negative.code: how they should look. This enables a consistent, coordinated appearance
  for everything in the frame.
  
  . The next step is to zero out the buffers that will be used to send
  DMX data for each universe, so that if no effect tries to set a value
  for a particular channel on this frame, a zero value will be sent for
  it.
  
  . Then Afterglow loops over all [[Effect Functions]] that are
  currently active for the show, and asks if any are ready to end, as
  described in the [[Effect Function Lifecycle]] section. If any are, they
  are removed from the list of active effects.
  
  . Then it makes another loop over any functions that did not end, to
  see how they want to affect the lights. It does this by calling, in
  order, each effect’s
  http://deepsymmetry.org/afterglow/doc/afterglow.effects.html#var-generate[generate]
  