Sending out of OpenIGTLink messages in response to MRML node changes are implemented here:
You could probably leave this code mostly as is (just add an option to send output messages asynchronously), and update the SendMessage method implementation in OpenIGTLinkIO to support asynchronous sending (make a copy of the message buffer, put it in a queue, and in a separate thread get the items from the queue and send them).
Before you start this, you need to build Slicer and SlicerOpenIGTLink extension. It would also make sense to do some profiling and fix the crash before you start developing the asynchronous message sending, so probably a RelWithDebInfo mode build would make the most suitable.