Futures version of reading ArrayBasedDirectedGraph

ArrayBasedDirectedGraph was not very clear with `apply()` method on almost 200 lines. I've cut it into submethods and rewrite it to futures instead of ExecutorUtil's parallel works.
I think 'nodesInOnePart' will be a better name now than nodesInOneThread.

Alternatively could just rename case class to NodesMaxIdsIdsInOneTask(nodes: Seq[Node], maxId: Int, nodeWithOutEdgesMaxId: Int)