implementation of cloneDeep

see #455 
Why `value.constructor` rather than `Date`?