fix snapshot.get_image_status logic

- the snapshot.get_image_status method is used for two purposes.
  1. to determine if a new image for the job needs to be created.
  2. poll to check if the snapshot image is successfully created and uploaded.
- extracted the logic that determine if new image needs to be created (_get_image_id).
- extracted the logic that polls for the image status.
- on exception, in both cases, update the job status to ERROR with next timeout
- wrap and re-raise the original exception as PollingException
- removed the assumption of image may be KILLED on exception.
- this fix also addresses one of the bug related to creation of
  duplicate scheduled images.