mergeDeep values override collections

Fixes #168

mergeDeep attempts to recursively call mergeDeep on child collections, so:

```
var m1 = Map({ a: Map({ b: 1 }) });
m1.mergeDeep({ a: null });
```

Was equivalent to:

```
var m1 = Map({ a: Map({ b: 1 }) });
m1.update('a', m => m.mergeDeep(null));
```

Which resulted in a no-op at best, and bad behavior at worst as `m.mergeDeep(null)` is unintended.

After this diff, `mergeDeep` first checks to see if the merging in value is lax-iterable-like, and only if it is a value validly passed to `mergeDeep` will that actually occur, otherwise the non-iterable value will replace the existing value (or be passed to the merging function).