Wip sip23 √

re: testing -- I agree that it doesn't directly address this (though it helps some: the type and naming makes it clearer that `prepare()` should probably happen at the suspension site; maybe we can clear this naming up even further).

however, the surface area is much smaller and is controllable: the surface area for testing is the Promise implementations (very small number), not the ECs (larger in number) or user utilities around injecting them (also larger in number).