3.0 collection unfold

Another common pattern that I found myself using constantly is concatenating the items from a collection containing multiple other collections. This pattern is known in functional programming as "unfolding" or "anamorphism".

It allows creating a collection containing all items from the internal collections. For example iterating with a single object the lines from different files sequentially.

This includes the commits from https://github.com/cakephp/cakephp/pull/5444 because I'm lazy and because I expected that one to be merged before this one would be ready.
I wonder if this should be strict regarding the false positives issues we had in the past when mixing strings and integer. And if this is always both strings, it is easy then anyway.