replacing Promise.prototype with this to support inheritance