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 log = [];
    var originalCreateElement = document.createElement;
    spyOn(document, 'createElement').and.callFake(function(type) {
      var el = originalCreateElement.apply(this, arguments);
      if (type === 'input') {
        Object.defineProperty(el, 'value', {
          get: function() {},
          set: function() {
            log.push('set value');
          },
        });
        spyOn(el, 'setAttribute').and.callFake(function(name, value) {
          log.push('set ' + name);
        });
      }
      return el;
    });
    ReactTestUtils.renderIntoDocument(<input value="0" type="range" min="0" max="100" step="1" />);
    expect(log).toEqual([
      'set data-reactroot',
      'set type',
      'set step',
      'set min',
      'set max',
      'set value',
      'set value',
      'set checked',
      'set checked',
    ]);
  });