Remove blocking pipe

Replace the blocking pipe with a synchronized void pointer to pass data
through unbuffered channels.
Call pthread_join for each thread created before disposing chan
Replace sleeps with wait_for_reader/wait_for_writer in tests

This fixes the race conditions occurring in the unit tests.
Merge pull request #15 from tylertreat-wf/no_blocking_pipe

Fix race conditions
Fix condition formatting
Merge pull request #16 from tylertreat-wf/no_blocking_pipe

Fix condition formatting
Merge pull request #14 from tylertreat/no_blocking_pipe

Remove blocking pipe