call 'job.submit()' from the 'run' method for async jobs

this changes the behavior slightly - if any synchronous jobs are encountered in
the sequence, they will be waited on before any more async jobs are submitted