JavaScript deep/recursive object/array merging without references