improved child IO loop

 - force_refresh and just_refreshed did not need to be struct variables
 - inter_io_timer and refresh_expire were just a hacky way of trying
   to describe a refresh rate, so i simplified it into just a
   timer that enforces a maximum refresh rate (aside from events
   which force a refresh)
 - whenever a child gets input, it is common for the child process
   to generate some output in response to that input (i.e. shell).
   thus we want to force a refresh on the next child output event
   so that interactivity is as fast as possible