I had an idea about deprecating the current iterator model (heap allocated) in favor of using a simple stack allocated type (potentially called a "Cursor"). I'm pretty sure that an iterator only needs to know its current position and possibly the type of iterator it is. That could be represented by a simple stack allocated struct:
Open question is it really that beneficial to have a single iterator "next" function i.e. "cass_iterator_next()". For cursors we should consider using a different "next" function for each type then the cursor data would only require position.