improve __no_kill_block fn and favour over raw mutex sync:

* now accepts an option arg t representing the thread to synchronise on
* doesn't attempt to grab the mutex if the current thread already has it
Give each thread created a group name:

* aids debug of orphaned sleeping threads:

    puts Thread.list.map{|t| t.thread_variable_get(:sonic_pi_thread_group)}