Fix sundry problems with the GIL (and signals) handling:
We used to release the GIL even if the Haskell RTS was not built to support multiple threads. We should only release the Python GIL if Haskell code can be called from multiple threads safely.
Relatedly: we should build, by default, with the threaded RTS.
We used to apply our various signal management schemes whenever we cross into Haskell. We should only do it when the main thread crosses into Haskell.
We did not remove our signal management schemes when we cross back into Python. We do now.
When we reacquire the GIL, we should make sure that all code between reacquisition and re-release takes place in an OS-bound thread.
Fix sundry problems with the GIL (and signals) handling: