Add ability to use `primus.forEach` asynchronously

I can't find a real use case for this at the moment. I would prefer to fix the `destroy` "issue" by removing `nextTick` in the `spark.end` method. But if there was really a reson for the `nextTick` we can revert the change and use this method instead.

It can also be useful in future, who knows.