JavaScript promises library meeting Promises/A+ spec