Make AsyncChain more generic

* accepts more generic `AsyncFunction` objects.
* invokes non-threadpool functions on same thread.
* `AsyncChain` implements `AsyncFunction` (wooo!)
Test illustrating weakness in the AsyncChain interface design.
remove comment. getThreadpool() will be necessary.  BatchWriter is a good example of why.  That code could never be encapsulated in a method that returns a single Callable (since it sends multiple Callables into the threadpool).
Merge pull request #93 from gdusbabek/asyncchain_improvements

AsyncChain improvements