Add support to configure CI schedules
Rework the collection handling to make it more generic and handle both protected branches and CI schedules.
- Factor out set splitting in a reusable function
- Factor out applying changes to an object in a reusable function
- Replace printbranch() with a more generic printdict()
- Use dictionary access to handle protected branches
- Drop the ProtectedBranch dataclass
- Use the object delete() method for protected branches
- Use get_changes() to detect the changes to be applied
- Make collection handling generic
- Add support for scheduling CI triggers
A followup MR will actually add the rules to our ruleset, once the implementation is landed.