Support fixed rate oplog replaying (ops per second)

This change adds an interface for controlling the rate at which we apply
op logs. Theoretically this interface could control the rate at which
more generic things are done. Though it's similar to the leakybucket
abstraction we already have, the relative rate ideas we have didn't
cleanly map onto the leakybucket so I thought this new interface was
useful. I considered doing the interface slightly differently -
returning a time to wait until applying the operation instead of just a
boolean. I ended up going with this because it a slightly simpler
interface, but I could probably be convinced the other one is better.

This change also adds to implementations of the interface. The fixed and
relative rate controllers we want for oplogs. It also adds a new command
line parameter to control which rate controller we use in the replay. It
defaults to the fixed rate.
I was on the fence about returning time.Duration versus a boolean, and your feedback makes me think time.Duration is the better way to go.

RE: giving it all the ops. My instinct would be not to do it that way because it means that each interface implementer would need to have very similar (the exact same?) logic for applying the ops. I do see some advantages to the approach though, so this isn't a hard opinion.