AsyncChain improvements

I made the interface more generic, so that it can work with guava `AsyncFunction` objects.  Also, I made `AsyncChain` implement `AsyncFunction`.

A few other tests and cleanups are included.