Remove blocking pipe

Replace the blocking pipe with a synchronized void pointer to pass data
through unbuffered channels.

This was originally proposed in issue #13.