code: function(obj, callback, context){
  
  		// if something is more "list like" .. use eachIndex
  		if(typeReflections.isIteratorLike(obj) || typeReflections.isMoreListLikeThanMapLike(obj) ) {
  			return shapeReflections.eachIndex(obj,callback,context);
  		} else {
  			return shapeReflections.eachKey(obj,callback,context);
  		}
  	}
docs: @function {Object, function(*), [Object]} can-reflect.each each
  @parent can-reflect/shape
  @description  Iterate a List-like or Map-like, calling `callback` on each keyed or indexed property
  
  @signature `each(obj, callback, context)`
  
  If `obj` is a List-like or an Iterator-like, `each` functions as [can-reflect.eachIndex eachIndex],
  iterating over numeric indexes from 0 to `obj.length - 1` and calling `callback` with each property and
  index, optionally with `context` as `this` (defaulting to `obj`).  If not, `each` functions as
  [can-reflect.eachKey eachKey],
  iterating over every key on `obj` and calling `callback` on each one.
  
  ```js
  var foo = new DefineMap({ bar: "baz" });
  var quux = new DefineList([ "thud", "jeek" ]);
  
  canReflect.each(foo, console.log, console); // -> logs 'baz bar {foo}'
  canReflect.each(quux, console.log, console); // -> logs 'thud 0 {quux}'; logs 'jeek 1 {quux}'
  ```
  
  @param  {Object}   obj     The object to iterate over
  @param  {Function(*, ValueLike)} callback a function that receives each item in the ListLike or MapLike
  @param  {[Object]}   context  an optional `this` context for calling the callback
  @return {Array} the result of calling [can-reflect.eachIndex `eachIndex`] if `obj` is a ListLike,
  or [can-reflect.eachKey `eachKey`] if a MapLike.