Rewrites schedules to use generic job storage.
This diff is kind of beefy, but only has a couple conceptual components and is mostly mechanical:
- Stored job ids are based on external origin, rather than origin, so we have to change how we fetch/reconcile to be based on external_origin_id
- ScheduleState is now JobState, with job_specific_data taking ScheduleJobData or SensorJobData, depending on the job type.
This is a non-backward compatible change. It will require a schedule wipe and schedule up. I will land it only after we have split master / release branches.