Replace job promise mechanism with non-blocking queue based system:

* Previous architecture blocked the running music threads on each
  synth trigger (with a mutex shared with *all* other jobs)
* New system is non-blocking. On synth triggers, threads need only push
  a message onto a queue and continue executing. A background thread 
  with a low priority will handle the management of the proms and 
  blocking on job completion.