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 container = document.createElement('div');
    ReactDOM.render(<input value="a" />, container);
    var node = container.firstChild;
    var nodeValue = 'a';
    var nodeValueSetter = jest.genMockFn();
    Object.defineProperty(node, 'value', {
      get: function() {
        return nodeValue;
      },
      set: nodeValueSetter.mockImplementation(function(newValue) {
        nodeValue = newValue;
      }),
    });
    ReactDOM.render(<input value="a" />, container);
    expect(nodeValueSetter.mock.calls.length).toBe(0);
    ReactDOM.render(<input value="b"/>, container);
    expect(nodeValueSetter.mock.calls.length).toBe(1);
  });
  it('should properly control a value of number `0`', function() {
    var stub = <input type="text" value={0} onChange={emptyFunction} />;
    stub = ReactTestUtils.renderIntoDocument(stub);
    var node = ReactDOM.findDOMNode(stub);
    node.value = 'giraffe';
    ReactTestUtils.Simulate.change(node);
    expect(node.value).toBe('0');
  });
  it('should have the correct target value', function() {
    var handled = false;
    var handler = function(event) {
      expect(event.target.nodeName).toBe('INPUT');