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

**What is the current behavior?**
This addresses a bug in `enzyme`, https://github.com/airbnb/enzyme/issues/1683.

On [this line](https://github.com/facebook/react/blob/master/packages/react-test-renderer/src/ReactShallowRenderer.js#L110) `element.type()` invokes the SFC with `element` as the `this` value. I believe that this is needed for create-react-class components, but that there needs to be a separate branch for SFCs.

**What is the expected behavior?**
`this` inside a strict-mode SFC will be `undefined`, not the element.

**Which versions of React, and which browser / OS are affected by this issue? Did this work in previous versions of React?**
In all of React 0.13, 0.14, 15, and 16, this bug exists.

While the bug ideally will be fixed, I understand that it's highly unlikely that it would be backported to the 14/15 lines - but I can wrap around it if there's a reliable way, in those versions, to distinguish SFCs from create-react-class components (is there?).
);
    invariant(
      isForwardRef(element) || typeof element.type === 'function',
      'ReactShallowRenderer render(): Shallow rendering works only with custom ' +
        'components, but the provided element type was `%s`.',
      Array.isArray(element.type)
        ? 'array'
        : element.type === null ? 'null' : typeof element.type,
    );
    if (this._rendering) {
      return;
    }
    this._rendering = true;
    this._element = element;
    this._context = getMaskedContext(element.type.contextTypes, context);
    if (this._instance) {
      this._updateClassComponent(element, this._context);
    } else {
      if (isForwardRef(element)) {
        this._rendered = element.type.render(element.props, element.ref);
      } else if (shouldConstruct(element.type)) {
        this._instance = new element.type(
          element.props,
          this._context,
          this._updater,
        );
        this._updateStateFromStaticLifecycle(element.props);
        if (element.type.hasOwnProperty('contextTypes')) {
          currentlyValidatingElement = element;
          checkPropTypes(