Simplifying the threading model to use guava ListenableFuture.

Now we can just setup the correct waiting mechanisms on the ListFuture
and we are off to the races.

Also, include some slight cleanup on threadpool creation