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.
What are your thoughts on making this return a `time.Duration` indicating when apply the op, instead of whether or not it should be applied, similar to the interface used by the exponential backoff library we looked at: https://github.com/cenkalti/backoff/blob/master/backoff.go#L8-26

Then you can use that duration with `time.Sleep` or `time.After` instead of polling every millisecond until this returns true.