code: function (fn, context) {
          var keys = Object.keys(this),
              l = keys.length,
              i = -1,
              m = {},
              val, key;
          while (++i < l) {
              key = keys[i];
              val = fn.call(context, this[key], key, this);
              if (val !== undefined) {
                  m[key] = val;
              }
          }
          return m;
      }
docs: /*
  Loops through the properties in an object until the callback assembling a new object
  with its properties set to the values returned by the callback function.
  If the callback function returns `undefined` the property will not be copied to the new object.
  The resulting object will have the same keys as the original, except for those where the callback
  returned `undefined` which will have dissapeared.
  The callback is provided with the value of the property, the name of the property
  and a reference to the whole object itself.
  The context to run the callback in can be overriden, otherwise it is undefined.
  
  @method itsa_map
  @param fn {Function} Function to be executed on each item in the object.  It will receive
  value {any} value of the property
  key {string} name of the property
  obj {Object} the whole of the object
  @return {Object} The new object with its properties set to the values returned by the callback function.