Free attributes memory after tag creation

In plc_tag_create, a call to attr_create_from_str allocates memory
that is passed to ab_tag_create, but then no longer used or referenced.
Added attr_destroy call after the return of ab_tag_create to free
memory.

Also, removed if-statement as it does not appear to do anything.
Pass through status in plc_tag_status

Previously only returned PLCTAG_ERR_NOT_IMPLEMENTED
in plc_tag_status if the tag->vtable or tag->vtable->status
were false. This resulted in many different errors being
hidden behind one error code.

Added code where when the above condition occurs, the tag->status
will be passed through if it is non-zero.
Moved vtable definition in ab_tag_create

Moved the creation of the vtable to earlier in ab_tag_create. When
failures occured after memory was allocated, but before the vtable
was setup, the destroy methods were not called and memory was not
reclaimed. This led to multiple memory leaks.
Merge pull request #2 from ericorange/move_vtable

Moved vtable definition in ab_tag_create
Merge pull request #3 from ericorange/free_attributes

Free attributes memory after tag creation
Merge pull request #4 from ericorange/plc_tag_status

Pass through status in plc_tag_status
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.