Split up GenProcess into a set of specific APIs
backport cabal fixes to master
Fix potential races in AsyncSTM

Previously we used 'expect' to obtain the worker pid, which is subject
to nasty races if our mailbox is busy. Switch this to use a private
temporary channel and use a TMVar to synchronise the startup instead of
a plan send.