Coalesce warnings for deprecated lifecycle hooks and print single message after reconciliation (rather than one per component-type).

Relates to PR #12028 and [this comment](https://github.com/facebook/react/pull/12028#discussion_r162420575).
}
  }
  function callComponentWillReceiveProps(
    workInProgress,
    instance,
    newProps,
    newContext,
  ) {
    const oldState = instance.state;
    if (typeof instance.componentWillReceiveProps === 'function') {
      if (__DEV__) {
        if (warnAboutDeprecatedLifecycles) {
          const componentName = getComponentName(workInProgress) || 'Component';
          if (!didWarnAboutLegacyWillReceiveProps[componentName]) {
            warning(
              false,
              '%s: componentWillReceiveProps() is deprecated and ' +
                'will be removed in the next major version. Use ' +
                'static getDerivedStateFromProps() instead. Read about the ' +
                'motivations behind this change: ' +
                'https://fb.me/react-async-component-lifecycle-hooks' +
                '\n\n' +
                'As a temporary workaround, you can rename to ' +
                'UNSAFE_componentWillReceiveProps instead.',
              componentName,
            );
            didWarnAboutLegacyWillReceiveProps[componentName] = true;
          }
        }
      }