Doesn't this make mContact the aggregate for person?  The function naming would indicate the opposite to me.  Maybe we should use something like aggregateInto and disaggregateFrom?

Also, it would be good to verify here that the intended aggregate has syncTarget == 'aggregate', and that the other doesn't.