multiply dependency counts instead of looping

changed needed_items back to the list of dictionaries
removed _itericdeps()
_aggregate() now takes the items to aggregate, rather than the ic list
of the items. this simplifies the call structure and removes some
duplication
_loadneededitems() now checks against items_db while loading them.