Now that #1510 has landed we still have one final issue to fix (ironically, the initial reason for #1510). https://github.com/facebook/react/pull/1510#issuecomment-170229012 + https://github.com/facebook/react/pull/1510#issuecomment-170229162, the problem being that `value` is managed as a property for the purpose of `<input>`, but `<progress>` requires it to be an attribute so that the attribute is correctly removed when null.

As discussed in the second comment, it seems to me that the right approach here is to actually remove all the special property logic from DOMPropertyOperations and instead implement it in the appropriate wrappers instead (ReactDOMInput, etc).

Repro: http://jsfiddle.net/670u7ure/8/
Original issue: https://github.com/facebook/react/issues/1431

cc @jimfb, @spicyj

var ReactDOMOption = require('ReactDOMOption');
var ReactDOMSelect = require('ReactDOMSelect');
var ReactDOMTextarea = require('ReactDOMTextarea');
var ReactInstrumentation = require('ReactInstrumentation');
var ReactMultiChild = require('ReactMultiChild');
var ReactServerRenderingTransaction = require('ReactServerRenderingTransaction');
var emptyFunction = require('emptyFunction');
var escapeTextContentForBrowser = require('escapeTextContentForBrowser');
var invariant = require('invariant');
var isEventSupported = require('isEventSupported');
var keyOf = require('keyOf');
var shallowEqual = require('shallowEqual');
var inputValueTracking = require('inputValueTracking');
var validateDOMNesting = require('validateDOMNesting');
var warning = require('warning');
var Flags = ReactDOMComponentFlags;
var deleteListener = EventPluginHub.deleteListener;
var getNode = ReactDOMComponentTree.getNodeFromInstance;
var listenTo = ReactBrowserEventEmitter.listenTo;
var registrationNameModules = EventPluginRegistry.registrationNameModules;
var CONTENT_TYPES = {'string': true, 'number': true};
var STYLE = keyOf({style: null});
var HTML = keyOf({__html: null});
var RESERVED_PROPS = {
  children: null,
  dangerouslySetInnerHTML: null,
  suppressContentEditableWarning: null,
};
var DOC_FRAGMENT_TYPE = 11;
function getDeclarationErrorAddendum(internalInstance) {