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).
warning(
                  false,
                  '%s: componentWillUpdate() 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_componentWillUpdate instead.',
                  componentName,
                );
                didWarnAboutLegacyWillUpdate[componentName] = true;
              }
            }
          }
          startPhaseTimer(workInProgress, 'componentWillUpdate');
          instance.componentWillUpdate(newProps, newState, newContext);
          stopPhaseTimer();
        } else {
          startPhaseTimer(workInProgress, 'componentWillUpdate');
          instance.UNSAFE_componentWillUpdate(newProps, newState, newContext);
          stopPhaseTimer();
        }
      }
      if (typeof instance.componentDidUpdate === 'function') {
        workInProgress.effectTag |= Update;
      }
    } else {