Add serialiazation methods to Buxton

We'll use serialization internally from now on, this commit adds the helper
methods to serialize and deserialize a BuxtonData struct

Signed-off-by: Michael Ikey Doherty <michael.i.doherty@intel.com>
Convert gdbm to use serialized data

GDBM no longer stores the entire struct (with missing value for pointers)
in its database, rather it serializes the data first, and converts them
on the fly for set and get value, so the process is entirely transparent.

Signed-off-by: Michael Ikey Doherty <michael.i.doherty@intel.com>
Fix accidental free of non-allocated memory

Currently retrieving a value that doesn't exist can result in a
free of d_string, which isn't actually allocated. This commit
ensures that we got a value from buxton before attempting
to free a string (if the type was indeed STRING)

Signed-off-by: Michael Ikey Doherty <michael.i.doherty@intel.com>
Add test to retrieve values from buxton

This test runs after buxton_client_set_value_check, and checks
whether the retrieved value and type are the same as the ones set,
and that we indeed did get a value back.

Confirmed to be working.

Signed-off-by: Michael Ikey Doherty <michael.i.doherty@intel.com>
Update TODO list

Signed-off-by: Michael Ikey Doherty <michael.i.doherty@intel.com>
Fix possible memory corruption in gdbm module

There is the possibility that data corruption could cause the
buxton_deserialize function to fail for a value in the gdbm backend.
However, we must also ensure we still free the dptr which is malloc()d
by gdbm even if we're not going to convert the data.

Signed-off-by: Michael Ikey Doherty <michael.i.doherty@intel.com>