wal: make record a protobuf type

```protobuf
message Record {
 	required int64 type  = 1 [(gogoproto.nullable) = false];
 	required int32 crc   = 2 [(gogoproto.nullable) = false];
 	optional bytes data  = 3;
}
```
TODO:
1. cleanup tests: we no longer need to test encoding/decoding anymore. We trust protobuf. :)
2. add CRC
3. cleanup saveXXX functions: we can make them a single function now. they have the same interface.
why not use `unexpectedEOF(err)`?