code: function set(obj, path, value, sep) {
      if (!is.nonEmptyStr(sep))  sep = defaultSepChar;
      if (!is.obj(obj))  return undefined;
      if (!is.nonEmptyString(path))  return obj;
  
      var parentPath = getParentPath(path, sep);
      var child = getChild(path, sep);
      if (!is.nonEmptyString(child))  return undefined;
  
      // case where there is a parent path
      if (parentPath.length) {
          var parentObj = get(obj, parentPath, sep);
          if (is.undefined(parentObj))  return undefined;
          parentObj[child] = value;
          return parentObj[child];
      }
  
      // there is no path
      obj[child] = value;
      return obj[child];
  }
docs: Given an object and a char-separated path, return the value at the path
  or false if no such value can be found.
  @param {Object} obj An object upon which to apply the path.
  @param {String} path The path to traverse the object, e.g 'a.b.c'
  @param {Any} value The value to set the property to.
  @param {String} [sep] The separator char to delimit the properties in the path. Optional. If not specified, '.' is assumed.
  @return {Undefined|Any} returns the value set if the property is found or undefined otherwise.