Message buffer

@bernerdschaefer here is a first PR for the `MsgBuffer`. 

This struct will act as a temporary data store as we're looping over records from Kinesis. It also make sure we don't store any duplicate records by keeping a tally of the sequence numbers.

When the buffer size reaches its `maxRecordsInBuffer` the `ShouldFlush()` method returns `true` and the app will know its time to do persist the data.

* Create a structure for collecting unique messages.
* Keep track of first checkpoint, and last checkpoint through sequence
  numbers from Kinesis.
* Add specs for core functionality.
 When the data comes off the stream it will be in `byte[]` format (http://godoc.org/github.com/sendgridlabs/go-kinesis#GetRecordsRecords) then we'll need to transform the data (typically into CSV or JSON). There will be one per line.

When we write to the buffer should I keep it in bytes? wondering if I should have `buf.buffer.WriteByte(data)` instead of `buf.buffer.WriteString(data)`. Then the earnest would be on the caller to make sure the `Byte` contains a string with newline.