Update suppression algorithm, improve locking

- Introduce a scaling callback for custom scaling functions
- Default scaling function now has a sigmoid-like shape
- Decouple scaling from queue size
- Reset average interval if queue is empty for longer than the interval limit
- Do not stop timer if queue is empty (expire once to forward first packet immediately)
- Make the ringbuffer lock-free and improve locking