code: function defineKey(value, key, src, propHash){
    var isDescriptor = descriptors.isDescriptor(value)
      , isRequired   = descriptors.isRequired(value)
      , prev;
  
    if (isRequired && (key in src)) return
  
    if ( !isRequired ) {
      if ( isDescriptor) {
        prev = (propHash.hasOwnProperty(key) ? propHash[key] : []).splice(0)
        return defineKey(value.resolve.call(src, key, prev), key, src, propHash)
      }
      else
        add(propHash, key, value)
    }
  
    src[key] = value
  }
docs: adds a property to the src object or expands the value if it is a decorator
  @param  {*} value
  @param  {string} key
  @param  {object} src