Commands

Parameterizing signals by scheduler type has had some interesting consequences for commands – namely, everything is delivered on the main scheduler, except for background work created with `onExecute` (like `-addSignalBlock:` or `RegisterAsyncObservable`).

This might sound detrimental to performance, but commands are generally used on the main thread anyways, and this makes event delivery more deterministic.

**To do:**

 - [ ] Fix leaky channels.
 - [ ] Figure out "transactional invariant violation" when sending errors from a background thread.

@joshaber @xpaulbettsx