Promises/A+ implementation base on http://promises-aplus.github.io/promises-spec/