Added support for fractions in usage calculations

Before this fix, since TokenBucket used integers instead of floating
point numbers, any fraction in calculations was lost. This causes
accuracy problems even for simple cases like a "max 5 in 10 seconds"
rate limits where client makes a request every 1 second.