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/

it('should update `defaultValue` for uncontrolled input', function() {
    var container = document.createElement('div');
    var node = ReactDOM.render(<input type="text" defaultValue="0" />, container);
    expect(node.value).toBe('0');
    ReactDOM.render(<input type="text" defaultValue="1" />, container);
    expect(node.value).toBe('0');
    expect(node.defaultValue).toBe('1');
  });
  it('should update `defaultValue` for uncontrolled date/time input', function() {
    var container = document.createElement('div');
    var node = ReactDOM.render(<input type="date" defaultValue="1980-01-01" />, container);
    expect(node.value).toBe('1980-01-01');
    ReactDOM.render(<input type="date" defaultValue="2000-01-01" />, container);
    expect(node.value).toBe('1980-01-01');
    expect(node.defaultValue).toBe('2000-01-01');
    ReactDOM.render(<input type="date" />, container);
  });
  it('should take `defaultValue` when changing to uncontrolled input', function() {
    var container = document.createElement('div');
    var node = ReactDOM.render(<input type="text" value="0" readOnly="true" />, container);
    expect(node.value).toBe('0');
    ReactDOM.render(<input type="text" defaultValue="1" />, container);
    expect(node.value).toBe('0');
  });
  it('should render defaultValue for SSR', function() {
    var markup = ReactDOMServer.renderToString(<input type="text" defaultValue="1" />);
    var div = document.createElement('div');
    div.innerHTML = markup;
    expect(div.firstChild.getAttribute('value')).toBe('1');
    expect(div.firstChild.getAttribute('defaultValue')).toBe(null);