This splits large writes into smaller ones when using a rate limit, making them into a legitimate trickle rather than large bursts with a long time in between.
* lib/model: Hide implementations behind interfaces for mocked testing * review