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.
Retry commit once if index metadata not found on server
Test with lower builder concurrency (will revert change aftewards)