Model: fallback when Object.defineProperty() fails

Object.defineProperty() is used to hide the private properties _dirty
and _data. When running in a non-ES5 environment, we need to fallback to
directly setting those properties.