defineProperty(name, def) {
		this._propertiesToMonitor.push(name);

		if(typeof def === 'function') {
			def = {
				mapper: def
			};
		} else if(typeof def === 'undefined') {
			def = {
				mapper: IDENTITY_MAPPER
			};
		}

		if(! def.mapper) {
			def.mapper = IDENTITY_MAPPER;
		}

		if(def.name) {
			this._reversePropertyDefinitions[def.name] = name;
		}
		this._propertyDefinitions[name] = def;
	}
Define a property and how the value should be mapped. All defined
properties are monitored if #monitor() is called.