### Preflight Checklist
<!-- Please ensure you've completed the following steps by replacing [ ] with [x]-->

* [x] I have read the [Contributing Guidelines](https://github.com/electron/electron/blob/master/CONTRIBUTING.md) for this project.
* [x] I agree to follow the [Code of Conduct](https://github.com/electron/electron/blob/master/CODE_OF_CONDUCT.md) that this project adheres to.
* [x] I have searched the issue tracker for an issue that matches the one I want to file, without success.

### Issue Details

* **Electron Version:**
8.0.0
* **Operating System:**
Only tested on mac 10.14.16 (Mojave)
* **Last Known Working Electron version:**
5.0.0   (not a regression range, this is the version I was using before)


### Expected Behavior
electron.screen can be used

### Actual Behavior
electron.screen can't be used if it was attempted to use before app ready event.

### To Reproduce
Details: it looks like that electron.screen is a lazy getter that gets badly cached if its initialization throws.
I had an `electron.screen` usage that threw the following error:

> "The 'screen' module can't be used before the app 'ready' event"

That's all fine and expected. However, a later usage of any of the APIs from `electron.screen`, for example `electron.screen.getAllDisplays()`, throws the following exception:

> callback can only be called for once

which, given the weird phrasing unrelated to the issue at hand, I believe is not intentional
shell/browser/api/electron_api_screen.cc
base::StringPiece name,
               const display::Display& display) {
  screen->Emit(name, display);
}
void DelayEmitWithMetrics(Screen* screen,
                          base::StringPiece name,
                          const display::Display& display,
                          const std::vector<std::string>& metrics) {
  screen->Emit(name, display, metrics);
}
}  
Screen::Screen(v8::Isolate* isolate, display::Screen* screen)
    : screen_(screen) {
  screen_->AddObserver(this);
  Init(isolate);
}
Screen::~Screen() {
  screen_->RemoveObserver(this);
}
gfx::Point Screen::GetCursorScreenPoint() {
  return screen_->GetCursorScreenPoint();
}
display::Display Screen::GetPrimaryDisplay() {