Add JenkinsBuildStep.cancel_step test
Refactor phase synchronization and job cancellation

- cancel_job now simply calls cancel_step and propagates metadata
- cancel_step is the primary entry point for managing jobs
- sync_phase now happens as part of job synchronization
- sync_phase only happens when the status of a job changes (slightly incorrect)