'Load as many items as we can this cycle.
Returns a tuple of counts:
* Existing items from previous cycles
* Items loaded this cycle
* Items that were unable to be loaded this cycle'

def load_cycle(self):

    (existing, loaded, pending) = (0, 0, 0)
    for (model_id, items) in self.spec.items():
        metadata = self.model_metadata[model_id]
        Model = apps.get_model(model_id)
        self.instances.setdefault(model_id, {})
        for item in items:
            if (item['key'] in self.instances[model_id]):
                existing += 1
            else:
                try:
                    instance = self.load_item(item, Model, metadata)
                except self.NeedsDependency as nd:
                    (relation, key) = nd.args
                    logger.debug('%s    %s    requires    %s    %s', model_id, item['key'], relation['resource'], key)
                    pending += 1
                else:
                    self.instances[model_id][item['key']] = instance
                    loaded += 1
    return (existing, loaded, pending)
