Added `merge` for merging object properties

Creates a new object instance, derived from `Object.prototype`
and with the merged properties of all passed objects. Property
conflicts are resolved by picking the rightmost candidate.

Properties are merged by looking at the actual property
descriptors and not just values, meaning things like accessor
functions and property metadata such as whether it's
enumerable, writable, or configurable, are passed along. Thus
a merge is about as identical to the input objects as it can
get.