Collection optimization with is_dirty

Set is dirty to true and loop through collection only if there is a new
model
Initial support for multiple row per model processing