Python - make all IBA functions release the GIL for their expensive part.

The notorious GIL (global interpreter lock) prevents other Python threads
from executing while our functions are holding the lock.

We use a ScopedGilRelease found in many places on the web. Its purpose is
to release the GIL before expensive work, then properly re-acquire it again
when it exists scope. This allows other Python threads to advance while we
are doing the meat of our work.

In many case, this meant writing a wrapper (to scope the GIL business)
where before we did not need a wrapper.