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
Quite the collection of nested iterators going on here.