Initial semaphore implementation

This implements a pipe-based semaphore.
Initial mutex implementation

This implements a basic mutex whose lock can be acquired by one thread
at a time.
Fix pipe_sem_t thread safety
Implement reentrant lock
Initial channel implementation
Allow channels to be bounded and unbounded
Remove debug statement
Change pipe_sem_init to allocate memory instead of passing pointer
Add test file
Implement buffered and unbuffered channels

These channels behave in a similar fashion to Go channels.
Remove main.c
Re-order includes
Change chan_recv to take value pointer
Remove test files
Change error code from 1 to -1
Pass size_t into send and recv

Also change error code from 1 to -1.
Merge branch 'master' of github.com:tylertreat/chan
Merge branch 'experimental'