throw bad_stack_alloc when we can't allocate a new stack. add benchmark to count how many tasks can spawn before bad_alloc.