* 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.h
public:
  static mate::Handle<WebFrame> Create(v8::Isolate* isolate);
  static void BuildPrototype(v8::Isolate* isolate,
                             v8::Local<v8::FunctionTemplate> prototype);
 private:
  explicit WebFrame(v8::Isolate* isolate);
  explicit WebFrame(v8::Isolate* isolate, blink::WebLocalFrame* blink_frame);
  ~WebFrame() override;
  void SetName(const std::string& name);
  double SetZoomLevel(double level);
  double GetZoomLevel() const;
  double SetZoomFactor(double factor);
  double GetZoomFactor() const;
  void SetVisualZoomLevelLimits(double min_level, double max_level);
  void SetLayoutZoomLevelLimits(double min_level, double max_level);
  void AllowGuestViewElementDefinition(v8::Local<v8::Object> context,
                                       v8::Local<v8::Function> register_cb);
  int GetWebFrameId(v8::Local<v8::Value> content_window);
  
  void SetSpellCheckProvider(mate::Arguments* args,
                             const std::string& language,
                             v8::Local<v8::Object> provider);
  
  void InsertText(const std::string& text);
  void InsertCSS(const std::string& css);
  
  void ExecuteJavaScript(const base::string16& code, mate::Arguments* args);
  void ExecuteJavaScriptInIsolatedWorld(