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
That makes me think that we should have an interface describing what a ResultSet is, so far we only promised a duck type of Collection.