I don't feel good about patching Promise... (denodeify should go away too) this is non-standard and won't be part of ES6