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