A single thread should be able to have multiple concurrent
conversations with other threads. So this module places
InterleavedChain as an instance of SMonad, and equipts it with
the capability to manage and modify a mapping of channels to other
threads. Note there is some danger in here. Deadlocks can start to
appear if you're silly or deliberately mean. However, this is
starting to get towards the Actor / Erlang model of message
passing.

Think of this as spawn or fork - it creates a child thread
which must be prepared to communicate with you. You get a channel
set up to the child which is emitted by this function. The child is
first told about the channel back to you and your Pid. The child
can go off and do what ever it wants, including creating additional
channels. The child starts off knowing with only one open channel
which is to the parent.