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
Yeah the unserialize case needs it. However, if the result set is always wrapped in a bufferediterator we might be able to remove that code, as streamable results can just raise exceptions on serialization.