Use wrapped native Promise as fake Deferred if available

see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise
and http://kangax.github.io/es5-compat-table/es6/#Promise