Overall looks good! A few things:
1) I cannot think of a case where the Callable which is returned wouldn't simply be placed on some ExecutorService, but just because I cannot think of a case doesn't mean someone might not want to do it. If we go with this patch we force people's hand to use an ExecutorService. Again, I don't think it's a big deal, but I'd to get other people's thoughts.
2) The tests which are failing are all failing because of a check to see if the statement hasn't been closed after calling batch, update, or query before calling get(). However, now that we're using an ExecutorService this "get()" call is being executed for us, so the check is no longer valid. I've removed the check from the test case so that all of the tests now pass. (Note: we still check to make sure the statements are all properly closed at the end.)
I attached a new patch which includes these changes: