Refactor memory management into cso_buffer_t

cso_buffer_t contains the serialized data.
Design cso_struct interface to encode C struct

Instead of calling cso_add for every member of a struct
cso_struct_encode allows you to serialize the data of
a complete struct with one call.

Use cso_struct_get_encodedsize to determine the size of a
serialized struct so you can allocate enough memory.

Use function cso_struct_decode to de-serialize the data
into a C struct.

The implementation will follow in the next patch.
The integeration of cso_struct_XXX with cso_XXX
will be implemented in the next patch.