PromisesA+ style implementation
Merge branch 'a-plus'