Added Promise.protect()
Added tests for cancel()