Allow altering consumer in callback

When a callback is issued, an upcomming consumer
could possibly be deleted. We must therefore find
the next consumer before the callback is invoked.

The callback is then free to do (almost) anything.