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 would have to implement max for AtomicInteger. Do you know any idiomatic code for this, @pankajgupta? Found something like this: http://java.dzone.com/articles/even-better-atomiclong-and What do you think?