trait/pubsub: caught case of recursive binding of .one

Calling .one() on the same event inside a callback would put another
function in the callback list that would be removed. Now using a mark &
sweep strategy to only remove the callbacks that were actually called.