**Do you want to request a *feature* or report a *bug*?**

Bug

**What is the current behavior?**

Consider the following code:

```js
const forwardRefComponentLike = function forwardRefComponentLike(_props, _ref) {
  return <span>FowardRef</span>;
};

const FowardRefComponent = React.forwardRef(forwardRefComponentLike, {});

const MemoOfFowardRefComponent = React.memo(FowardRefComponent);
```

The `MemoOfFowardRefComponent` component does not pick up the name of the ForwardRefComponent and is instead rendered in devtools as:

```
 Anonymous [Memo]
    forwardRefComponentLike [ForwardRef]
```

<img width="262" alt="Screen Shot 2019-09-09 at 10 45 02 PM" src="https://user-images.githubusercontent.com/227292/64587241-81816d00-d353-11e9-8f20-873aa00f5076.png">

See this codesandbox for a demo and a comparison of how React.memo handles regular functional components: https://codesandbox.io/s/react-forwardref-and-memo-combo-33vx7

**What is the expected behavior?**

I would expect this to pick up the name of the thing passed into React.Memo, as happens for regular components

```
forwardRefComponentLike [Memo]
```

**Which versions of React, and which browser / OS are affected by this issue? Did this work in previous versions of React?**

Tested with React 16.9.0.
forceFallbackForSuspenseIDs.delete(id);
      if (forceFallbackForSuspenseIDs.size === 0) {
         L
        setSuspenseHandler(shouldSuspendFiberAlwaysFalse);
      }
    }
    const fiber = idToFiberMap.get(id);
    if (fiber != null) {
      scheduleUpdate(fiber);
    }
  }
   Remember if we're trying to restore the selection after reload.
   In that case, we'll do some extra checks for matching mounts.
  let trackedPath: Array<PathFrame> | null = null;
  let trackedPathMatchFiber: Fiber | null = null;
  let trackedPathMatchDepth = -1;
  let mightBeOnTrackedPath = false;
  function setTrackedPath(path: Array<PathFrame> | null) {
    if (path === null) {
      trackedPathMatchFiber = null;
      trackedPathMatchDepth = -1;
      mightBeOnTrackedPath = false;
    }
    trackedPath = path;
  }
   We call this before traversing a new mount.
   It remembers whether this Fiber is the next best match for tracked path.
   The return value signals whether we should keep matching siblings or not.
  function updateTrackedPathStateBeforeMount(fiber: Fiber): boolean {
    if (trackedPath === null || !mightBeOnTrackedPath) {