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
Merge pull request #458 from jyates/cleanup-threading

Simplifying the threading model to use guava ListenableFuture.