code: function(obj, callback, context){
  		// each key in something map like
  		// eachOwnEnumerableKey
  		if(obj) {
  			var enumerableKeys = shapeReflections.getOwnEnumerableKeys(obj);
  
  			// cache getKeyValue method if we can
  			var getKeyValue = obj[getKeyValueSymbol] || shiftedGetKeyValue;
  
  			return shapeReflections.eachIndex(enumerableKeys, function(key){
  				var value = getKeyValue.call(obj, key);
  				return callback.call(context || obj, value, key, obj);
  			});
  		}
  		return obj;
  	}
docs: @function can-reflect.eachKey eachKey
  @parent can-reflect/shape
  @description Iterate over a MapLike, calling `callback` on each enumerable property
  
  @signature `eachKey(obj, callback, context)`
  
  Iterate all own enumerable properties on Map-like `obj`
  (using [can-reflect/shape/getOwnEnumerableKeys canReflect.getOwnEnumerableKeys]), and call
  `callback` with the property value, the property key, and `obj`, and optionally setting
  `this` on the callback as `context` if provided, `obj` otherwise.
  
  ```js
  var foo = new DefineMap({ bar: "baz" });
  
  canReflect.eachKey(foo, console.log, console); // logs 'baz bar {foo}'
  ```
  
  @param  {Object}   obj   The object to iterate over
  @param  {Function(*, String)} callback The callback to call on each enumerable property value
  @param  {[Object]}   context  an optional `this` context for calling `callback`
  @return {Array}    the enumerable keys of `obj` as an Array