refactor covenant, begin building more full features Promise, having when, done, fail and always functions
adapt tests and mainline to avoid recursive calls to nextTick from node