Alternative fix for #3567

As discussed in #5825, this puts handles that should be preserved into a global ObjectIdDict. The only slightly sketchy parts are the idle and async worker invocations which I'll have to think about (we don't have a good interface for them yet, really), but it's not as simple as just putting a wait() based interface on top, since people are using them for synchronization with threaded C libraries.
Alternative fix for #3567

As discussed in #5825, this puts handles that should be preserved into a global ObjectIdDict. The only slightly sketchy parts are the idle and async worker invocations which I'll have to think about (we don't have a good interface for them yet, really), but it's not as simple as just putting a wait() based interface on top, since people are using them for synchronization with threaded C libraries.
Fix two small bugs in process handling with new libuv.

First, I forgot the finalizer (my bad). The second issue is slightly
more subtle which is that we now destroy process objects earlier, so
libuv might actually get a SIGCHLD. We have a custom patch that
disables signals while in fork, which also happended to block SIGCHLD
because it was in the wrong place. The associated libuv commit fixes
that.
Fix EPIPE error
Merge pull request #5905 from JuliaLang/kf/ioiddict

Alternative fix for #3567