Switch to using an executor service (fails tests still)

Initial patch, fails tests still..
There's an ugly instanceof here, but this is the simplest way I could think of
for transitioning to using async callbacks. Of course, this can be removed
if we decide to make all calls async.