Embedding arbitrary web content is problematic when it comes to keyboard shortcuts because:
- Web content can steal app shortcuts (see e.g. brave/browser-laptop#4407)
- Blocked web content (e.g. a focused `<webview>` performing expensive computation) will also prevent app shortcuts from firing immediately

To fix this, we need a way to _always_ handle certain shortcuts in the main process. I think the most flexible solution would be something like this:

``` js
app.addProtectedShortcut('CmdOrCtrl+Tab', (event) => {
  event.preventDefault();
});
```

We could then implement:

``` cpp
bool CommonWebContentsDelegate::PreHandleKeyboardEvent(
    content::WebContents* source,
    const content::NativeWebKeyboardEvent& event,
    bool* is_keyboard_shortcut) {
  return /* event is protected shortcut and the handler called preventDefault */;
}
```

@zcbenz Thoughts? I'm happy to work on this if we come up with a reasonable approach.

atom/browser/api/atom_api_web_contents.h
const gfx::Rect& initial_rect,
                      bool user_gesture,
                      bool* was_blocked) override;
  content::WebContents* OpenURLFromTab(
      content::WebContents* source,
      const content::OpenURLParams& params) override;
  void BeforeUnloadFired(content::WebContents* tab,
                         bool proceed,
                         bool* proceed_to_fire_unload) override;
  void MoveContents(content::WebContents* source,
                    const gfx::Rect& pos) override;
  void CloseContents(content::WebContents* source) override;
  void ActivateContents(content::WebContents* contents) override;
  void UpdateTargetURL(content::WebContents* source, const GURL& url) override;
  bool IsPopupOrPanel(const content::WebContents* source) const override;
  void HandleKeyboardEvent(
      content::WebContents* source,
      const content::NativeWebKeyboardEvent& event) override;
  void EnterFullscreenModeForTab(content::WebContents* source,
                                 const GURL& origin) override;
  void ExitFullscreenModeForTab(content::WebContents* source) override;
  void RendererUnresponsive(content::WebContents* source) override;
  void RendererResponsive(content::WebContents* source) override;
  bool HandleContextMenu(const content::ContextMenuParams& params) override;
  bool OnGoToEntryOffset(int offset) override;
  void FindReply(content::WebContents* web_contents,
                 int request_id,
                 int number_of_matches,
                 const gfx::Rect& selection_rect,
                 int active_match_ordinal,