':param aggregated: A list of aggregated activities
:param activities: A list of the new activities
:returns tuple: Returns new, changed
Merges two lists of aggregated activities and returns the new aggregated
activities and a from, to mapping of the changed aggregated activities
**Example** ::
aggregator = ModulusAggregator()
activities = [Activity(1), Activity(2)]
aggregated_activities = aggregator.aggregate(activities)
activities = [Activity(3), Activity(4)]
new, changed = aggregator.merge(aggregated_activities, activities)
for activity in new:
print activity
for from, to in changed:
print \'changed from %s to %s\' % (from, to)'

def merge(self, aggregated, activities):

    current_activities_dict = dict([(a.group, a) for a in aggregated])
    new = []
    changed = []
    new_aggregated = self.aggregate(activities)
    for aggregated in new_aggregated:
        if (aggregated.group not in current_activities_dict):
            new.append(aggregated)
        else:
            current_aggregated = current_activities_dict.get(aggregated.group)
            new_aggregated = deepcopy(current_aggregated)
            for activity in aggregated.activities:
                try:
                    new_aggregated.append(activity)
                except DuplicateActivityException:
                    pass
            if (current_aggregated.activities != new_aggregated.activities):
                changed.append((current_aggregated, new_aggregated))
    return (new, changed, [])
