Quick fix for #4650

Buffering results at the end and not at the beginning prevents result
formatters being invoked everytime the iterator is reset
Fixed broken tests
Moving code to where it actually belongs
A couple micro-optimizations related to counting results from ResultSet
Making BufferedIterator Countable as an optimization for the ORM
Adding tests for BufferedIterator
Removing magic count proxy in BufferedIterator, it was a bad idea
Extracting collection definition into an interface
Adding a ResultSetInterface to standarize the result of a query
Merge pull request #4691 from cakephp/3.0-translate-behavior-fix

3.0 translate behavior fix