Use setImmediate for beforeExec

Protects from larger state errors if an unprotected throw occurs within beforeExec but it otherwise caught upstream. This forces beforeExec throws to be process/domain fatal.