Clean-up and re-working of Promise.

The outside API remains largely the same, except the constructor is
now only taking :$scheduler. The main change is that Promise is no
longer tied to running code at all. Rather, that's just what the
run factory method and then methods set up. Promise.sleep(...) is
also mostly delegated to the Scheduler. This makes Promise more
focused around its synchronization primitive nature, and puts the
other Promise factories on a more even footing.