Only teardown once set up has finished successfully.

Actually, this is wrong.  Hmm.  So the very first callback that executes, there'll be one callback added to `callbacks`, `setImmediate` is triggered, and the `setImmediateId` is stored.  Any other callbacks get added to the `callbacks` list one by one, but because there's a `setImmediateId`, they won't get processed - so there's a batch with multiple items in it again.  Is that intentional?

(`processing` and `setImmediateId` do seem to be trying to achieve the same thing, might be worth just settling on one of them as well)