Issue title: Unhandled error is displayed twice
 Issue body: This was a bit weird:

<img width="967" alt="screen shot 2017-08-04 at 3 51 29 pm" src="https://user-images.githubusercontent.com/810438/28973995-cebc65bc-792c-11e7-8f7f-066a4ca038dd.png">

Look at the last log.

Notice how our internal error that we're supposed to just give to the error boundary is said to be uncaught. I wonder why. It doesn't look like intentional.
 Comments: 
 Comment 0: Hmm. I didn’t see this before because I was testing the “swallowing Promise” case specifically.
 Comment 1: The annoying thing is that even if you set up CORS, you still see the same error twice. Unless you’re swallowing it.

<img width="979" alt="screen shot 2017-08-04 at 4 30 52 pm" src="https://user-images.githubusercontent.com/810438/28975573-65a27192-7932-11e7-900e-22c662fe4e96.png">

 Comment 2: For context, the reason it happens is because we intentionally let the browser interpret an error as uncaught before we rethrow. The justification is discussed in https://github.com/facebook/react/issues/10474.

**If you follow the advice in the error and add an error boundary (which you should!), you will only see the error once.** So that's not a huge problem in day-to-day workflow. In fact it nudges people to add error boundaries which is nice.

Another justification for this is that **if you accidentally swallow an error we still print it once**. That alone makes this worth it IMO. We’ve had hundreds of comments and dozens of issues caused by people swallowing their own errors, and the fact that we will print them at least once now seems like enough benefit to compensate for printing them twice when they’re uncaught, un-swallowed, and don’t have a boundary.
 Comment 3: Is there currently a way to prevent dispatching the error event twice in a case as simple as this?

```javascript
window.addEventListener('error', () => console.log('error event dispatched'))
const onClick = () => { throw new Error('foo') }
ReactDOM.render(React.createElement('button', { onClick }, 'test'), container)
```

Because the error is thrown in a click handler rather than `render()`, error boundaries don't seem to help.

PS. Not sure if this belongs here or a on different issue or if I should open a new one.
 Comment 4: Does an approach like https://github.com/facebook/react/issues/10474#issuecomment-322909303 help?
 Comment 5: Probably. Something like this works as well:

```javascript
window.addEventListener('error', (evt) => {
  if (evt.error.markedForReactWeirdness) {
    evt.preventDefault()
    return
  }

  evt.error.markedForReactWeirdness = true
  // ...regular error handling here...
})
```

But I considered that a temporary hack, hoping that a more elegant solution is (or will be) available :)
 Comment 6: Why is this important for you? The duplication only happens in development mode. And presumably error logging etc should only happen in production. 
 Comment 7: Ah, good point, I forgot that this wouldn't be an issue in production mode.

In that case it's just more of a minor annoyance.
My app displays errors caught in the global handler, so while developing the error display feature, they always show up twice, unless I hack the duplicates away.
 Comment 8: Tagging as wontfix.
The behavior is intentional as explained in https://github.com/facebook/react/issues/10384#issuecomment-334142138.
 Comment 9: @gaearon I got this error twice, one from the component file containing the error and the second error from `react-dom.development.js`. How to swallow the error to be shown once and what is the error boundary to add because I didn't understand well what you mention:

> If you follow the advice in the error and add an error boundary (which you should!), you will only see the error once. So that's not a huge problem in day-to-day workflow. In fact it nudges people to add error boundaries which is nice.

What's the solution here to avoid the error to be metioned twice?

![cross_origin](https://user-images.githubusercontent.com/31925861/32596223-e60c8998-c532-11e7-9329-653224318e35.png)

 Comment 10: If someone comes here looking for a solution for jsdom, a few related links:

https://github.com/facebook/jest/issues/5223#issuecomment-355440432
https://github.com/facebook/react/issues/11098#issuecomment-355032539
 Comment 11: @gaearon could you clarify what you mean by `The duplication only happens in development mode.`  I'm running my app in production mode, with webpack, etc, and I see duplicate errors in my console (and sent to Bugsnag).

My app config specifies the boundary above Provider:

```
ReactDOM.render(
      <ErrorBoundary>
        <Provider store={store}>
          <Routes history={browserHistory}/>
        </Provider>
      </ErrorBoundary>,
      document.getElementById('app')
    );
```
 Comment 12: @jgentes "The above error..." stuff is only logged in development.

If you're seeing some other symptoms please file a new issue with an example.
{'source': 'GithubIssues', 'repo_name_with_owner': 'facebook/react', 'issue_id': 248029861, 'repo_stars': 197155.0}