Run init code first, then start other threads.

Instead of blocking all the non-init threads using a semaphore, and
waking them up once the init thread is ready--just don't start the other
threads until the init code finishes.

The eChronos implementation will need this extra complexity, but the
FreeRTOS backend doesn't, and it obscures some of what's going on.