Note
Using this library to serialize non plain old data types will result in platform defined behavior unless you specify padding for the struct yourself. If you want to serialize non plain old data types, then it is recommended to serialize each field manually (also when deserializing)
TODO
Add more tests