Make vm stack overflow an exception, not a fatal error.
Make the vm stack size configurable in the command line.
Make USE_SEMAPHORE a runtime option.

  It appears to not dead lock, while the previous method to stop/resume
threads appears to dead lock frequently on recent Fedora (rawhide and
f20).
Make the -fuse-semaphore option receive an argument.

  Also default to use semaphore. Several quick experiments with it
disabled are still failing. Should be something with recent kernel,
glibc or gcc.
  Common deadlock looks like this:

 (gdb) info thr
   Id	Target Id	  Frame
   3	Thread 0x7ffff7f6d700 (LWP 11388) "owl" 0x00007ffff72d2b5d in __lll_lock_wait () from /lib64/libpthread.so.0
   2	Thread 0x7ffff7fae700 (LWP 11387) "owl" 0x00007ffff6f34552 in sigsuspend
     () from /lib64/libc.so.6
 * 1	Thread 0x7ffff7fb0840 (LWP 11386) "owl" 0x00007ffff6fdde07 in sched_yield () from /lib64/libc.so.6
 (gdb) bt
 #0  0x00007ffff6fdde07 in sched_yield () from /lib64/libc.so.6
 #1  0x0000000000433d78 in gc_mark_thread (thread=0x703a70) at oobject.c:1107
 #2  0x00000000004340ce in gc_mark_roots () at oobject.c:1174
 #3  0x0000000000432ec0 in gc () at oobject.c:702
 #4  0x0000000000431fc8 in onew_object (pointer=0x697418, type=t_thread,
     length=1096) at oobject.c:283
 #5  0x0000000000432054 in onew_thread (pointer=0x697418) at oobject.c:301
 #6  0x0000000000447dea in ovm_thread (type=20,
     ip=0x7ffff7fcce70 "L\213\263\210\002", builtin=0) at ovm.c:237
 #7  0x00007ffff7fcd5c6 in ?? ()
 #8  0x00007ffff7ffe168 in _r_debug ()
 #9  0x0000000004000000 in ?? ()
 #10 0x0000000000000000 in ?? ()
 (gdb) thr 2
 [Switching to thread 2 (Thread 0x7ffff7fae700 (LWP 11387))]
 #0  0x00007ffff6f34552 in sigsuspend () from /lib64/libc.so.6
 (gdb) bt
 #0  0x00007ffff6f34552 in sigsuspend () from /lib64/libc.so.6
 #1  0x0000000000432d73 in suspend_handler (unused=10) at oobject.c:640
 #2  <signal handler called>
 #3  0x00007ffff72d2b5d in __lll_lock_wait () from /lib64/libpthread.so.0
 #4  0x00007ffff72ce5e8 in _L_lock_913 () from /lib64/libpthread.so.0
 #5  0x00007ffff72ce410 in pthread_mutex_lock () from /lib64/libpthread.so.0
 #6  0x0000000000431f8e in onew_object (pointer=0x7ffff2efafd0, type=t_word,
     length=8) at oobject.c:275
 #7  0x0000000000432320 in onew_word (pointer=0x7ffff2efafd0, w=0)
     at oobject.c:326
 #8  0x0000000000459155 in ovm_store_w (w=0, p=0x7ffff2efafd0, t=0)
     at ovm_word.c:204
 #9  0x00007ffff7fccfcb in ?? ()
 #10 0x00007ffff7fae700 in ?? ()
 #11 0x00007fffffffddd0 in ?? ()
 #12 0x0000000000000000 in ?? ()
 (gdb) thr 3
 [Switching to thread 3 (Thread 0x7ffff7f6d700 (LWP 11388))]
 #0  0x00007ffff72d2b5d in __lll_lock_wait () from /lib64/libpthread.so.0
 (gdb) bt
 #0  0x00007ffff72d2b5d in __lll_lock_wait () from /lib64/libpthread.so.0
 #1  0x00007ffff72ce5e8 in _L_lock_913 () from /lib64/libpthread.so.0
 #2  0x00007ffff72ce410 in pthread_mutex_lock () from /lib64/libpthread.so.0
 #3  0x0000000000431f8e in onew_object (pointer=0x7fffeeef9fd0, type=t_word,
     length=8) at oobject.c:275
 #4  0x0000000000432320 in onew_word (pointer=0x7fffeeef9fd0, w=0)
     at oobject.c:326
 #5  0x0000000000459155 in ovm_store_w (w=0, p=0x7fffeeef9fd0, t=0)
     at ovm_word.c:204
 #6  0x00007ffff7fccfcb in ?? ()
 #7  0x0000000000000000 in ?? ()
 (gdb)

But making experimental builds with global states&mutexes to prevent gc
until a thread is fully started does not prevent the deadlocks.
Add the new 'join' builtin to wait for a thread to finish.

  The 'join' call also returns the actual thread function result.