Refactor schedulers to use separate types within a class

This allows functions to be parameterized with the scheduler(s) they allow.
Super WIP I don't even know man
Add a ScheduledIO type
Refactor Disposable to only support IO actions
Refactor Subscriber to use ScheduledIO
Signal WIP
Reverse runScheduledIO arguments
Remove ScheduledIO

It was an interesting idea, but ScheduledIOs aren't nearly as composable as they should be, and it's impossible to get a meaningful value out of them, which sucks.
Extricate ScheduledIO from Subscriber
Just a hidden Scheduler parameter, nothing more
Revert "Remove ScheduledIO"

This reverts commit 4b6b414bc89694859787a930170b12de354f1740.
Allow ScheduledIO to be deconstructed directly
Use the new ScheduledIO in Subscriber
Remove the ImmediateScheduler
Use the new ScheduledIO in Signal
Move ScheduledIO to Scheduler.IO
Refactor Scheduler.Internal and include SchedulerIO
Fix up Signal and Subscriber
Refactor Subject and Signal.Scheduled
Actually, subscription should return a SchedulerIO action

This way, subscribers can't easily subscribe to a signal from the
incorrect scheduler in an event handler.