I'm curious, why does this have two parameter lists? Were there cases when you wanted to configure a graph but not pass in the various closures?

Also for Java/Python compatibility later I'd consider renaming it to Pregel.run(params).