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. The interface returns the amount of time to wait before applying
an oplog entry.

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 think generally the documentation for functions in an interface are supposed to be grouped with the function (does this pass linting, as it is? I think this would consider `WaitTime` undocumented and complain)

So this could look like:

```go
// A Controller controls the rate at which oplog entries are applied.
type Controller interface {
  // WaitTime takes in an operation and returns how long until that operation should be applied.
  // Note that WaitTime should only be called once for each operation.
  WaitTime(op map[string]interface{}) time.Duration
}
```