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.