defaults to keeping falsy values, options object to clean if desired