4a8c1194f9
I had a hard time understanding `configMerge` - the old `arguments`
slicing and nested loops took me a while. The jsdoc didn't help much.
After it finally clicked, I rewrote it to be readable: rest param + a
simple `for...of` instead of the `while`-stack.
And there's one real behavior fix. With this default and user config:
```js
defaults: { foo: { a: 1 } }
config: { foo: [10, 20] }
```
the old code merged them into `{ foo: { 0: 10, 1: 20, a: 1 } }`. Now the
array just replaces the object -> `{ foo: [10, 20] }`.
I added a small test for that case.
Only affects modules using `configDeepMerge: true` that override an
object default with an array, so the impact is tiny.