Smarter promise return assumption

Before assuming the user returned a full promise just by the presence of a "then" attribute, we should check that it is actually a function.