Rework withTempFile code and use System.IO.openTempFile where available
The System.IO.openTempFile is much better because it opens the temp files securely. Howver it is only available in base-2 and only of GHC. In base-3 it is available for all implementations. So in practice that means it's only for GHC and we have to use our compatability implementation for hugs and nhc98. Not sure of the status for jhc.