Intellegently convert js values to immutable collections when deep merging

A common pattern is passing JS values to mergeDeep with the expectation that they will be converted similarly to `fromJS`, however this wasn't the case, and the conversion was instead based on the immutable collection being merged into.

This changes the behavior to allow that use case, and is now documented on the `merge` function and applies to the whole merge family.