We should be warning if a controlled component becomes uncontrolled, or vice versa.

I thought this was fixed in https://github.com/facebook/react/issues/5821, but apparently it was either not fixed for checkbox components, or maybe I subsequently broke it in https://github.com/facebook/react/pull/7003 (or similar).  Regardless, we should fix it.

Demo of case that should warn: https://jsfiddle.net/s4742gkk/

var unboundInputOnChange = function() {
      expect(this).toBe(undefined);
    };
    var instance = <input type="text" onChange={unboundInputOnChange} />;
    instance = ReactTestUtils.renderIntoDocument(instance);
    ReactTestUtils.Simulate.change(instance);
  });
  it('should throw if both value and valueLink are provided', function() {
    var node = document.createElement('div');
    var link = new ReactLink('yolo', jest.fn());
    var instance = <input type="text" valueLink={link} />;
    expect(() => ReactDOM.render(instance, node)).not.toThrow();
    instance =
      <input
        type="text"
        valueLink={link}
        value="test"
        onChange={emptyFunction}
      />;
    expect(() => ReactDOM.render(instance, node)).toThrow();
    instance = <input type="text" valueLink={link} onChange={emptyFunction} />;
    expect(() => ReactDOM.render(instance, node)).toThrow();
  });
  it('should support checkedLink', function() {
    var link = new ReactLink(true, jest.fn());
    var instance = <input type="checkbox" checkedLink={link} />;
    instance = ReactTestUtils.renderIntoDocument(instance);
    expect(ReactDOM.findDOMNode(instance).checked).toBe(true);
    expect(link.value).toBe(true);
    expect(link.requestChange.mock.calls.length).toBe(0);