Split ColdSignal interface across some extensions
Split HotSignal interface with extensions too
Add last(), single(), and wait() to ColdSignal
Add HotSignal.next(), like first()