Added Promise.join(promises..., function)

Added a new version of Promise.join. When passed only promises, it returns the same result as `Promise.all([promises...])`. When passed a function, it calls that function with the values of the passed promises, i.e. `Promise.all([promises...]).spread(function)`