- Electron version: 1.3.6
- Operating system: Windows 7 x64
- Other: Microsoft Office 2013 (will make more sense in a bit)

`shell.openItem()` is a blocking call, it would be nice if it's async or has an async version to handle synchronous external application behavior.

Reproduce: 
Open a password-protected Microsoft Excel file, `shell.openItem()` will be blocking until the Password window is submitted or dismissed. Consequently Microsoft Word does not have this issue.

Related to #2761.

shell/common/platform_util_win.cc
HRESULT STDMETHODCALLTYPE PreCopyItem(DWORD,
                                        IShellItem*,
                                        IShellItem*,
                                        LPCWSTR) override;
  HRESULT STDMETHODCALLTYPE PostCopyItem(DWORD,
                                         IShellItem*,
                                         IShellItem*,
                                         LPCWSTR,
                                         HRESULT,
                                         IShellItem*) override;
  HRESULT STDMETHODCALLTYPE PreDeleteItem(DWORD, IShellItem*) override;
  HRESULT STDMETHODCALLTYPE PostDeleteItem(DWORD,
                                           IShellItem*,
                                           HRESULT,
                                           IShellItem*) override;
  HRESULT STDMETHODCALLTYPE PreNewItem(DWORD, IShellItem*, LPCWSTR) override;
  HRESULT STDMETHODCALLTYPE PostNewItem(DWORD,
                                        IShellItem*,
                                        LPCWSTR,
                                        LPCWSTR,
                                        DWORD,
                                        HRESULT,
                                        IShellItem*) override;
  HRESULT STDMETHODCALLTYPE UpdateProgress(UINT, UINT) override;
  HRESULT STDMETHODCALLTYPE ResetTimer(void) override;
  HRESULT STDMETHODCALLTYPE PauseTimer(void) override;
  HRESULT STDMETHODCALLTYPE ResumeTimer(void) override;
  ULONG m_cRef;
};
DeleteFileProgressSink::DeleteFileProgressSink() {