recursive deep merge for any number of objects and arrays