Base class for rate limiters.
Usage of the base limiter is through the acquire and aacquire methods depending on whether running in a sync or async context.
Implementations are free to add a timeout
An in memory rate limiter based on a token bucket algorithm.
This is an in memory rate limiter, so it cannot rate limit across different processes.
The rate limiter only allows time-based rate limit