Break coercion cycles with cooperating promises
Break coercion cycles with cooperating promises

Cooperating promise libraries must implement `valueOf` to extract the
fulfillment value from a fulfilled promise (or return the selfsame
promise for an unresolved or rejected promise).  This breaks cycles in
coercion, where one library uses `resolve` to coerce a foreign promise
to a local promise, which would in turn call `then` on the foreign
promise, which would in turn attempt to coerce the promise with its own
`resolve`, which would then in turn call `then` on our coerced promise,
ad nauseum.

Fixes #106.

IlianStefanov/q,npmcomponent/techjacker-q,potato620/q,CozyCo/q,yizziy/q,aramk/q,dracher/q,gorcz/q,ShopCo/q,potato620/q,IbpTeam/node-q,IlianStefanov/q,harks198913/q,X-Bird/q,Muffasa/q,npmcomponent/microjs-q,kriskowal/q,greyhwndz/q,homer0/q,criferlo/q,b12consulting/q,lidasong2014/q,mcanthony/q,rasata/q,miamarti/q,ajunflying/q,bnicart/q,rasata/q,greyhwndz/q,pwmckenna/q,yizziy/q,zhangwenquan/q,criferlo/q,pwmckenna/q,STRd6/q,lidasong2014/q,mcanthony/q,liwangbest/q,homer0/q,willsmth/q,Zeratul5/q,welbornio/q,linalu1/q,willsmth/q,ShopCo/q,kevinsawicki/q,zhangwenquan/q,signpost/q,Muffasa/q,CozyCo/q,kriskowal/q,liwangbest/q,darkdragon-001/q,dracher/q,gustavobeavis/q,behind2/q,SarunasAzna/q,manushthinkster/q,linalu1/q,gustavobeavis/q,welbornio/q,lvdou2518/q,manushthinkster/q,aramk/q,lvdou2518/q,jymsy/q,bnicart/q,100star/q,IbpTeam/node-q,b12consulting/q,gorcz/q,behind2/q,SarunasAzna/q,jymsy/q,Zeratul5/q,X-Bird/q,darkdragon-001/q,miamarti/q,harks198913/q,ajunflying/q,signpost/q,cgvarela/q,cgvarela/q