Implement R.evolve

evolve :: { k: (v → v) } → { k: v } → { k: v }
======

For the proposal, see: ramda/ramda#648
could this be done as `cloneDeep(mapObjIndexed(function(fn, key) { //...`

?

internal `_extend` does a shallow clone, which may result in surprises