ThreadTrickle: split trickle behaviour out to its own thread