adding main louvain implementation - untested