3.0 buffered iterator

Adds a new iterator meant to cache results from the iterator it wraps. This improves the `Collection::compile()` method by not fetching all elements immediately and will help me fix a nasty bug in the ORM ResultSet later on.