Implement R.evolve

evolve :: { k: (v → v) } → { k: v } → { k: v }
======

For the proposal, see: ramda/ramda#648
I see, so we are doing defensive copying. I think this kind-of misses the point of embracing immutable data structures, [which results in faster performance and memory savings, according to Facebook](https://github.com/facebook/immutable-js#the-case-for-immutability):

> If an object is immutable, it can be "copied" simply by making another reference to it instead of copying the entire object. Because a reference is much smaller than the object itself, this results in memory savings and a potential boost in execution speed for programs which rely on copies (such as an undo-stack).

That's why I prefer shallow copies when working with functional-programming-oriented libraries.