BUG: LazyLoading must be threadsafe
BUG: LazyLoading must be threadsafe

The loading of modules in python *must* occur as a
single atomic transaction in multiprocessing environments (i.e.
the module should only be loaded by one thread).

The LazyLoading of ITK did not treat the loading of
modules as an atomic transaction, and multiple threads
would attempt to load the cascading dependencies out of
order.

The `getattr` override that allows LazyLoading to work
in the case where the module is *not* loaded now blocks
while the first thread completes the delayed module loading.
After the first thread completes module load as an atomic
transaction, the other threads fall through (skip loading)
and return the value requested.

Need to use a recursive lock for thread ownership so that the
first thread can acquire a RLock as often as needed while
recursively processing dependant modules lazy loads.  Other threads need
to wait until this first thread releases the RLock.

WIP: SQME Fixup mutli-threading locks.

thewtex/ITK,vfonov/ITK,BRAINSia/ITK,thewtex/ITK,thewtex/ITK,Kitware/ITK,LucasGandel/ITK,Kitware/ITK,richardbeare/ITK,InsightSoftwareConsortium/ITK,Kitware/ITK,thewtex/ITK,richardbeare/ITK,thewtex/ITK,vfonov/ITK,vfonov/ITK,LucasGandel/ITK,thewtex/ITK,Kitware/ITK,vfonov/ITK,vfonov/ITK,Kitware/ITK,LucasGandel/ITK,richardbeare/ITK,hjmjohnson/ITK,InsightSoftwareConsortium/ITK,vfonov/ITK,LucasGandel/ITK,Kitware/ITK,hjmjohnson/ITK,InsightSoftwareConsortium/ITK,BRAINSia/ITK,vfonov/ITK,InsightSoftwareConsortium/ITK,BRAINSia/ITK,hjmjohnson/ITK,thewtex/ITK,BRAINSia/ITK,BRAINSia/ITK,hjmjohnson/ITK,hjmjohnson/ITK,richardbeare/ITK,hjmjohnson/ITK,InsightSoftwareConsortium/ITK,LucasGandel/ITK,InsightSoftwareConsortium/ITK,richardbeare/ITK,LucasGandel/ITK,LucasGandel/ITK,LucasGandel/ITK,richardbeare/ITK,vfonov/ITK,Kitware/ITK,BRAINSia/ITK,InsightSoftwareConsortium/ITK,richardbeare/ITK,BRAINSia/ITK,vfonov/ITK,hjmjohnson/ITK