We used to throw if event listener is not a function in Stack:

```js
ReactDOM.render(
  <h1 onClick={{}}>Hello World!</h1>,
  document.getElementById('container')
);
```

<img width="565" alt="screen shot 2017-08-08 at 3 41 08 pm" src="https://user-images.githubusercontent.com/810438/29077502-2646412e-7c50-11e7-8c99-3b7f6c0a2589.png">

Fiber silently ignores this.

I think we should throw. This would let us add support for objects (e.g. for passive listener configuration) if we want to in a minor rather than a major.
it('passes objects on known SVG attributes if they do not define toString', () => {
      var obj = {};
      var container = document.createElement('div');
      ReactDOM.render(<svg arabicForm={obj} />, container);
      expect(container.firstChild.getAttribute('arabic-form')).toBe(
        '[object Object]',
      );
    });
    it('passes objects on custom attributes if they do not define toString', () => {
      var obj = {};
      var container = document.createElement('div');
      ReactDOM.render(<div customAttribute={obj} />, container);
      expect(container.firstChild.getAttribute('customAttribute')).toBe(
        '[object Object]',
      );
    });
    it('allows objects that inherit a custom toString method', function() {
      var parent = {toString: () => 'hello.jpg'};
      var child = Object.create(parent);
      var el = ReactTestUtils.renderIntoDocument(<img src={child} />);
      expect(el.src).toBe('hello.jpg');
    });
    it('assigns ajaxify (an important internal FB attribute)', function() {
      var options = {toString: () => 'ajaxy'};
      var el = ReactTestUtils.renderIntoDocument(<div ajaxify={options} />);
      expect(el.getAttribute('ajaxify')).toBe('ajaxy');
    });
  });
});