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.
since concurrency is different from parallelism, i suggest using either one of the words "concurrency" or "parallelism" -- i think  concurrencyLevel is slightly better here but parallelismLevel is also fine, just that it will be good to not use both words