Fix timeout handling in integration suite

Fix timeout handling by using a single timeout channel rather than
reinitializing the timeout channel with every status check
iteration.
Replace existing jobs on stop/start (to allow override)
Break start/stop/restart assertions up

Easier to reason about logic, make some extra checks optional to avoid
race conditions from Docker clients.
Merge pull request #72 from smarterclayton/cleanup_restart_logic

Improve integration tests