Refactor replay

Refactor the replay package.  This change breaks the replay into well separated pipeline stages, namely:

[parse BSON] ---op---> [controlRate] ---op---> [batchOps] ---[]op---> [applyOps]

Each stage controls the lifetime of their own output channels, closing them when appropriate.  Each stage also properly exits early in the case of failure.  The design of the new package is influenced heavily by [this blog post on pipelines](http://blog.golang.org/pipelines)
This update also makes oplog-replay compatible with go 1.3+.
Yeah, I looked at some examples like that when I was writing this.  I was trying to maintain the functionality of the original oplog replay (batch by size rather than time), but channels just seem like a poor fit for that purpose.  I also thought about running another internal goroutine to pull things off the channel into a queue that I could fully control locks around... but that seems like overcomplicating things