Retry Chef API calls

All Chef API calls will now be retried with configurable attempts and interval.  If the request continues to get `500` errors (i.e. due to a Chef Server outage), a RuntimeError will be raised.

This should fix #138, though it's very difficult to test given our lack Chef testing infrastructure.  I have confirmed that this code doesn't break existing behavior.