Make throttle threadsafe

The throttle module isn't thread-safe. It also currently has a bug in that it fails to alert the user when throttle is started with multiple worker threads. 

This PR changes it to use a thread-safe cache. The behavior remains the same, but now uses the flush event to purge keys instead of tracking it internally, making the code simpler.




This seems to be masking some kind of error. If value.to_i became 0, it's possible that the user entered invalid input and we're masking that by assuming zero means use-the-default. I see this came from elsewhere in the previous version of this file, so I'll make a note to fix this oddity later.