This is a bug in `React.createElement` code:

`React.createElement` does not warn if `props.__proto__` is null ( from `Object.create(null)` ) since it [believes that to be a plain object](https://github.com/facebook/react/blob/master/src/isomorphic/classic/element/ReactElement.js#L135) originating from #6134. But since it directly accesses `hasOwnProperty` it fails if such object is passed as props.

Reproduce:

``` js
const props = Object.create(null);
React.createElement(() => null, props);
```

**What is the expected behavior?**
It shouldn't use `hasOwnProperty` directly on props if such object is expected.

React: 15.1.0
Browsers: All
OS: All

This affects all versions of React but since after 15.1.0 the acceptable shape of props is explicitly defined then it should be explicitly supported as well.

it('returns an immutable element', function() {
    var element = React.createFactory(ComponentClass)();
    expect(() => element.type = 'div').toThrow();
  });
  it('does not reuse the original config object', function() {
    var config = {foo: 1};
    var element = React.createFactory(ComponentClass)(config);
    expect(element.props.foo).toBe(1);
    config.foo = 2;
    expect(element.props.foo).toBe(1);
  });
  it('warns if the config object inherits from any type other than Object', function() {
    spyOn(console, 'error');
    React.createElement('div', {foo: 1});
    expect(console.error).not.toHaveBeenCalled();
    React.createElement('div', Object.create({foo: 1}));
    expect(console.error.argsForCall.length).toBe(1);
    expect(console.error.argsForCall[0][0]).toContain(
      'React.createElement(...): Expected props argument to be a plain object. ' +
      'Properties defined in its prototype chain will be ignored.'
    );
  });
  it('extracts key and ref from the config', function() {
    var element = React.createFactory(ComponentClass)({
      key: '12',
      ref: '34',
      foo: '56',
    });
    expect(element.type).toBe(ComponentClass);
    expect(element.key).toBe('12');