- call preMain in callMain
 - exitRuntime just as we initRuntime in callMain
 - don't initRuntime from run
 - remove code that attempts to propogate _main's exit status through returns. we can't rely on that, the status must be signaled through an event to support both sync / async applications.