Catch generic Fog exceptions for retry when using fleet.start

Previously we had been seeing multiple exceptions to do with AWS transient
failures:

    #<Fog::Errors::Error: Reload failed, Fog::Compute::AWS::Server i-7b97ba49 went away.>
    #<Fog::Compute::AWS::Error: RequestLimitExceeded => Request limit exceeded.>

This patch wraps the call to fleet.start in a retry wrapper, returning retry
count status each time, a random sleep (to work around API request limits)
and finally the ability to throw the original error if the exception
continues.

I see this as an initial start to adding resiliency to this problematic area,
to at least cater for the majority of our errors for now.

Signed-off-by: Ken Barber <ken@bob.sh>
During fleet.start retry call fleet.destroy and report on sleep

This addition to the fleet.start retry block will add a fleet.destroy call
before fleet.start is retried in case we need to do some cleanup for it
to work again. It is caught inside its own begin/rescue block and has a
timeout to stop it blocking forever.

I've also added reporting on the number of seconds we are sleeping before
retry.

Signed-off-by: Ken Barber <ken@bob.sh>
Merge pull request #416 from kbarber/ticket/master/handle_blimpy_errors_with_retries

Catch generic Fog exceptions for retry when using fleet.start