Improved backoff handling for async applications

This pull request improves backoff handling as described in #13.  More
specifically,

* task failures are only reported to the backoff timer if we are not
  currently in a backoff state.  When we come back from a backoff, the
* ready count is set to 1 to test the waters and see if we have fully
  recovered.