Make gather properly lazy, using continuations.

This eliminates the cheating implementation we've used so far.