Object, applicative (function), and array promise types. Re-implement some when.js core methods using the new types, to preserve back compat. Regression tests pass