Subprocess' ioloop can be replaced if it's closed.

Since Subprocess holds on to a singleton ioloop, and that ioloop can be
closed, if someone tries to re-initialize Subprocess (like during a call
to set_exit_callback), clear out the now-defunct ioloop to make way for
one that can run callbacks.

As part of this, IOLoop implementations now have a property they need to
define, closed, which Subprocess uses to know if its loop is closed. For
minimal impact, it's a property that by default throws a
NotImplementedError, and Subprocess falls back to old behavior.