deep merge for javascript objects