### Issue Details

* **Electron Version:** 9.0.0 (beta versions of 9.0.0 too)
* **Operating System:** Windows 10 1903
* **Last Known Working Electron version:** 7.2.4

### Repro steps
1. **require** a native module in a Renderer process (on a page)
2. call libuv function **uv_queue_work** 5 times
3. get **uv_after_work_cb** invoked 5 times
4. reload the page 
5. call libuv function **uv_queue_work** 5 times once more

### Expected Behavior
6. get **uv_after_work_cb** invoked 5 times

### Actual Behavior
6. get **uv_after_work_cb** invoked 1 or 2 times, remaining ones never get invoked by libuv

### To Reproduce
I prepared a sample project with minimal code that demonstrates the problem:
>>> https://github.com/jphw/libuv_problems

Please read the README.MD and check src/libuv_problems_module.cpp sources.

### Additional Information
**app.allowRendererProcessReuse = false;**  works as a workaround for this issue

shell/renderer/electron_renderer_client.cc
}
  
  if (!node::tracing::TraceEventHelper::GetAgent())
    node::tracing::TraceEventHelper::SetAgent(node::CreateAgent());
  
  bool initialized = node::InitializeContext(renderer_context);
  CHECK(initialized);
  node::Environment* env =
      node_bindings_->CreateEnvironment(renderer_context, nullptr);
  
  
  if (command_line->HasSwitch(switches::kDisableElectronSiteInstanceOverrides))
    env->set_force_context_aware(true);
  env->set_warn_context_aware(true);
  environments_.insert(env);
  
  electron_bindings_->BindTo(env->isolate(), env->process_object());
  AddRenderBindings(env->isolate(), env->process_object());
  gin_helper::Dictionary process_dict(env->isolate(), env->process_object());
  process_dict.SetReadOnly("isMainFrame", render_frame->IsMainFrame());
  
  node_bindings_->LoadEnvironment(env);
  if (node_bindings_->uv_env() == nullptr) {
    
    node_bindings_->set_uv_env(env);
    
    node_bindings_->RunMessageLoop();
  }
}
void ElectronRendererClient::WillReleaseScriptContext(