Social structure as a computational co-ordination mechanism in societies of autonomous problem-solving agents