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
let updatePayload = null;
  for (const propKey in rawProps) {
    if (!rawProps.hasOwnProperty(propKey)) {
      continue;
    }
    const nextProp = rawProps[propKey];
    if (propKey === CHILDREN) {
       For text content children we compare against textContent. This
       might match additional HTML that is hidden when we read it using
       textContent. E.g. "foo" will match "f<span>oo</span>" but that still
       satisfies our requirement. Our requirement is not to produce perfect
       HTML and attributes. Ideally we should preserve structure but it's
      
      
      
      
      if (typeof nextProp === 'string') {
        if (domElement.textContent !== nextProp) {
          if (__DEV__ && !suppressHydrationWarning) {
            warnForTextDifference(domElement.textContent, nextProp);
          }
          updatePayload = [CHILDREN, nextProp];
        }
      } else if (typeof nextProp === 'number') {
        if (domElement.textContent !== '' + nextProp) {
          if (__DEV__ && !suppressHydrationWarning) {
            warnForTextDifference(domElement.textContent, nextProp);
          }
          updatePayload = [CHILDREN, '' + nextProp];
        }