Fix for multiple issues with start cycle (cron job/manually start cycle button)

Issues fixed:

1. Server errors when relative fields aren't set correctly (this can happen if frequency changes after task_group_task has been created) - solution: disable frequency field when editing workflow.
2. cycle task end date can be before start date - solution: move end date to next week/year/quarter/month in this case.
3. multiple issues with the `_calc_start_date_of_next_period `. `datetime.date` throws an exception if the date is not valid. **I added a new python dependency that makes the code a lot cleaner.** If this is a problem I can make it work similarly to `_normalize_date`, but I couldn't use `_normalize_date` here because the use case is somewhat different.

I'm sad that I didn't manage to refactor unit tests that @bmomberger-reciprocity created.