WIP: Add MonadicPromise.

The existing definition for `Promise.all`/`Promise.race` doesn't resolve
the array elements enough (we ought to `cast` instead of `resolve`), so
we need to reimplement them.

Haven't finished auditing the code and writing test cases to prove that
we unwrap exactly the right number of times in each method.

See https://github.com/domenic/promises-unwrapping/issues/95