Defaults should not overwrite defined options

In a recent commit, the applying of defaults changed from a `forEach` loop that only applied a default if the option is `undefined`, to using node's `util._extend`, which simply copies from one object to another. This change introduced a regression where defaults overwrite defined options.