I think this belongs in BpmControl but I see this is complicated. 

The cleanest thing I have thought of sofar is that RateControl has a setBpmControl() method and RateControl calls BpmControl::getSyncedRate() if it believes it should defer to BpmControl for rate. 

Also, RateControl::calculateRate should call BpmControl::getSyncAdjustment directly and pass in userTweakingSync as an argument to that function. 

This has a couple of benefits in exchange for awkwardness in RateControl:
* No rate decisions are made in EngineBuffer (which adding the getSyncAdjustment call to EngineBuffer violates)
* It would prevent awkwardness in EngineBuffer of having to pass  userTweakingSync from RateControl to BpmControl

I realize this might result in a slight change in behavior which I'm going to follow up on in a different comment.