React version: 0.0.0-f77c7b9d7

## Steps To Reproduce

1. Mount a component with even listeners in a `ShadowRoot`

Link to code example:

- [codesandbox with `react@next`](https://codesandbox.io/s/next-shadowroot-as-root-element-pkktc) (crashes)
- [codesandbox with `react@16.13.1`](https://codesandbox.io/s/16-shadowroot-as-root-element-m74ob) (mounts  without errors/warnings)


## The current behavior

Throws with 
> ensureListeningTo(): received a container that was not an element node. This is likely a bug in React.

## The expected behavior

1. throw with a descriptive error that ShadowRoot is no longer supported as a root element

or

2. continue to allow ShadowRoot as a root element

No preference here. This was just from an old regression test we had. 

Will be fixed by https://github.com/facebook/react/pull/15894
const NORMALIZE_NEWLINES_REGEX = /\r\n?/g;
  const NORMALIZE_NULL_AND_REPLACEMENT_REGEX = /\u0000|\uFFFD/g;
  normalizeMarkupForTextOrAttribute = function(markup: mixed): string {
    const markupString =
      typeof markup === 'string' ? markup : '' + (markup: any);
    return markupString
      .replace(NORMALIZE_NEWLINES_REGEX, '\n')
      .replace(NORMALIZE_NULL_AND_REPLACEMENT_REGEX, '');
  };
  warnForTextDifference = function(
    serverText: string,
    clientText: string | number,
  ) {
    if (didWarnInvalidHydration) {
      return;
    }
    const normalizedClientText = normalizeMarkupForTextOrAttribute(clientText);
    const normalizedServerText = normalizeMarkupForTextOrAttribute(serverText);
    if (normalizedServerText === normalizedClientText) {
      return;
    }
    didWarnInvalidHydration = true;
    console.error(
      'Text content did not match. Server: "%s" Client: "%s"',
      normalizedServerText,