adopted Hash#deep_merge from activesupport 4 as deep_merge4