Cleaned up interfaces and implementations with futures.  I also renamed RunnableFuture to RunnableFutureImp (for the time being) to avoid the confusing from java.util.concurrent.RunnableFuture