making AsyncChain typesafe by using a separate builder that maintains the type per function addition.

also use the iterator instead of copying the array - more idiomatic
java, and this should make things "a bit" more efficient.
Merge pull request #369 from jeeyoungk/jee.20140924.make-asyncchain-typesafe

Making AsyncChain typesafe