Use proper iterator spec devices for `Promise.race`.

Greatly improves its exception handling, converting all exceptions to rejections.

This is half of #46, and the first step toward #6.