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.
Do you mean pass to `apply` of `ArrayBasedDirectedGraph` only `parallelism: Int`, have private FuturePool  - unbounded pool and AsynchSemaphore inside `apply` that will not allow to have more than `parallelism` threads and pass the futurePool with semaphore to the subfunctions?