implementation of cloneDeep

see #455 
It would be nice to use a switch statement here:

```javascript
switch (toString.call(value)) {
    case '[object Array]':
    case '[object Object]':
        return ...;
    case '[object Date]':
        return ...;
    case '[object Function]':
        return ...;
    default:
        return ...;
}
```

This obviates the need for the variable assignment. :)