add log abstraction to store records in disk

@xiangli-cmu 
This adds _log_ and _message_ abstraction.
I haven't thought about how to batch encoding yet. It had better be considered in snapshotting.

Unless we have benchmarks of different go serialization framework and come up with the best, I will take the traditional role and use protobuf for prototyping.