3.0 translate behavior fix

This set of changes prevent result iterators and map reduce operations to be executed more than once when iterating multiple times the same ResultSet.

It also contain a few optimizations for calling count on ResultSetDecorator.

Fixes https://github.com/cakephp/cakephp/issues/4650
I heard you liked collections, so I put a collection around your collections.

On second look I think I can avoid the nesting in one of the cases. My original idea was to remove the buffering logic our of the ResultSet, but it seems that there is still some code depending on it.