Refactor into library

This change refactors the oplog-replay code into a library. It's mostly just moving around code / updating the Makefile and README.md. It exposes an interface to replay the oplog (io.Reader, speed, host) which is what I'm using right now in my initial code for the oplog-replayer (worker) so I know it's not completely unreasonable, but we may have to revisit the interface while we do that.

I also did some minor refactoring so that the library never calls panic - it only returns errors.
(moving comment to most recent commit) I am interested in learning your thinking for error handling this way. Where is the error consumed from the error channel. Is it beneficial to block on error reading, rather than allow the deferred functions to run?