function dotSet(obj, path, value) {
  return setWith(clone(obj), path, value, clone);
}
Immutable set function for plain JS Object. Makes a shallow clone of all objects affected in the path
@param {Object|Array} obj - object to assign in
@param {String|Array<String>} path - path to set th value i
@param {Any} value - value to assign with
@return {Object|Array}