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).
false,
              '%s: componentWillMount() is deprecated and will be ' +
                'removed in the next major version. 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_componentWillMount instead.',
              componentName,
            );
            didWarnAboutLegacyWillMount[componentName] = true;
          }
        }
      }
      instance.componentWillMount();
    } else {
      instance.UNSAFE_componentWillMount();
    }
    stopPhaseTimer();
    if (oldState !== instance.state) {
      if (__DEV__) {
        warning(
          false,
          '%s.componentWillMount(): Assigning directly to this.state is ' +
            "deprecated (except inside a component's " +
            'constructor). Use setState instead.',
          getComponentName(workInProgress),
        );
      }
      updater.enqueueReplaceState(instance, instance.state, null);