React version: 16.13.1

## Steps To Reproduce

This code works fine when using plain Node.js, but fails: when [esm module](https://github.com/standard-things/esm) is enabled:

```js
const { act } = require('react-dom/test-utils');

act(async () => {
  console.log('something');
}).then(
  () => console.log('success'),
  () => console.log('error')
);
```

```
$ node test.js
something
success
```

```
$ node -r esm test.js
something
Warning: This browser does not have a MessageChannel implementation, so enqueuing tasks via await act(async () => ...) will fail. Please file an issue at https://github.com/facebook/react/issues if you encounter this warning.
error
```

The warning is caused by an exception happened in this `try/catch` block: https://github.com/facebook/react/blob/72d00ab623502983ebd7ac0756cf2787df109811/packages/shared/enqueueTask.js#L15-L23

This is happening because `esm` module brings its own implementation of the `module` object with slightly different behavior which requires `this` context to be properly preserved.

This one-line change should do the fix:

```diff
-enqueueTaskImpl = nodeRequire('timers').setImmediate;
+enqueueTaskImpl = nodeRequire.call(module, 'timers').setImmediate;
```

This issue has also been reported to React-testing-library, which has similar code: https://github.com/testing-library/react-testing-library/issues/614

**Why should this be a fix in React and not in ESM?**

React relied on undocumented behavior of Node modules loader. It was never guaranteed that it will work without proper `this` context.

In fact, it will not work as expected if you try it with any non built-in module

```js
const nodeRequire = module.require;

nodeRequire('timers'); // built-in module, works
require('react') // proper require, also works
nodeRequire('react'); // Error: Cannot find module 'react', even though the module is installed
```

The current code in React may break in future if `timers` module will be replaced with anything else, or if Node.js changes their internal implementation.
/**
 * Copyright (c) Facebook, Inc. and its affiliates.
 *
 * This source code is licensed under the MIT license found in the
 * LICENSE file in the root directory of this source tree.
 *
 * @flow
 */
let didWarnAboutMessageChannel = false;
let enqueueTaskImpl = null;
export default function enqueueTask(task: () => void) {
  if (enqueueTaskImpl === null) {
    try {
      
      
      const requireString = ('require' + Math.random()).slice(0, 7);
      const nodeRequire = module && module[requireString];
      
      
      enqueueTaskImpl = nodeRequire('timers').setImmediate;
    } catch (_err) {
      
      
      
      enqueueTaskImpl = function(callback: () => void) {
        if (__DEV__) {