Removed do { } while(0); wrapper for
faking exceptions.  The critical_block macro
does the same thing.
Work to handle better multithreading.  There are several changes due to this:

1) creation of the multithread.c example.  This was used to initially check for
failure when tags are accessed by multiple threads simultaneously.  This results
in a fast crash.

2) Moving the de-allocation of request buffers from the read and write status
checking routines to the IO thread.

3) renaming the background handler thread to the IO thread.

4) adding two new public API calls to lock and unlock a tag.  This required
additions to plc_tag_create and plc_tag_destroy to respectively create and
destroy a mutex stored in the base tag struct.