Refactor cleanup logic

Cleanup logic is refactored to be thread-safe.  Finalization can ocurr
in any thread.  As such the .free() method of the underlying libvirt
objects needs to be synchronized.

The LibvirtCleanupWrapper provides a wrapper object around the .free()
methods which ensures thread safe calling of .free().  LibVirtAdapter
and the wrapper objects use the LibvirtCleanupWrapper to free the
underlying objects.
Update examples with new commandline and config