Strategies for CTR and RL

This is an experimental PR to refactor out common control patterns in the CTR and RL functions.  It makes things much more concise and introduces a `minimize` strategy.

It's not clear that being more concise is helpful here.  This new code is presumably much less approachable.

It does however make things more tunable.  For example we could switch out `L` for something else just by changing the objective keyword.