Deferred: Increase usability of jQuery.when with other implementations

jQuery.when was previously assuming that in order for value to be a Promise, it must implement a `promise` method.  All current specs that I'm aware of define a promise as "an object or function with a then method
whose behavior conforms to this specification."[1][2].  The ES6 spec[3] defines this too, but I've got no idea exactly where I should link to in that document for that - the lingo is a bit above my head :)

This is mostly just to kick off discussion around what would need to be done in order to increase compliance with other promise implementations per the linked ticket, but hopefully at least the tests would be useful is whatever implementation is used.

[1]http://promises-aplus.github.io/promises-spec/#point-6
[2]http://wiki.commonjs.org/wiki/Promises/A
[3]http://people.mozilla.org/~jorendorff/es6-draft.html#sec-ispromise

Fixes #14510