New features:
- Loose restrict on argument, single function is allowed
- Better error handling, returns a rejected promise when error occurs
- Compatible with all libraries conforming to Promises/A+ spec