* Output of `node_modules/.bin/electron --version`: v3.0.5
* Operating System (Platform and Version): macOS 10.14

**Expected Behavior**
When webPreferences.sandbox is set to true and webFrame is using a provider for spell checking, the memory must be released after page reload.

**Actual behavior**
The memory isn't released and caused memory leak

**To Reproduce**

- Clone https://github.com/vrbsm/example-memory-leak-electron
- Run npm run start
Memory usage of electron process will be increasing in task manager after reloading the page several times

**Screenshots**
![test-memory-leak-01](https://user-images.githubusercontent.com/9887288/47675838-c2d4b800-db99-11e8-97e8-b5b27bcab929.gif)



atom/renderer/api/atom_api_web_frame.cc
blink::WebFrame* frame = web_frame_->FirstChild();
  if (frame && frame->IsWebLocalFrame())
    return mate::CreateHandle(isolate(),
                              new WebFrame(isolate(), frame->ToWebLocalFrame()))
        .ToV8();
  else
    return v8::Null(isolate());
}
v8::Local<v8::Value> WebFrame::NextSibling() const {
  blink::WebFrame* frame = web_frame_->NextSibling();
  if (frame && frame->IsWebLocalFrame())
    return mate::CreateHandle(isolate(),
                              new WebFrame(isolate(), frame->ToWebLocalFrame()))
        .ToV8();
  else
    return v8::Null(isolate());
}
v8::Local<v8::Value> WebFrame::GetFrameForSelector(
    const std::string& selector) const {
  blink::WebElement element = web_frame_->GetDocument().QuerySelector(
      blink::WebString::FromUTF8(selector));
  blink::WebLocalFrame* element_frame =
      blink::WebLocalFrame::FromFrameOwnerElement(element);
  if (element_frame)
    return mate::CreateHandle(isolate(), new WebFrame(isolate(), element_frame))
        .ToV8();
  else
    return v8::Null(isolate());
}
v8::Local<v8::Value> WebFrame::FindFrameByName(const std::string& name) const {