Allow values to be passed through `sync`/`wait`:

* `sync` and `wait` now require a synch id argument
* `sync` may now be passed an optional second 'value' argument
* The value argument passed to `sync` is now the return value of all matching calls to `wait`
* Another simple, but awesome win.

````
def clock(beat)
  beat += 1
  sync :clock_beat, beat
  sleep 1
  beat
end
  
def drums
  beat_num = wait :clock_beat
  puts beat_num
  sample :heavy_kick if (beat_num % 2) == 0
end

in_thread do
  beat = 0 
  loop{beat = clock(beat)}
end
  
in_thread{loop{drums}}
````