serialize: accept NULL values for strings

There is an assert that disallows NULL string values, so remove it.

Also, in case a key's value is NULL, its length will not count towards
the serialize "size", so the first deserialize lookahead check fails. We
have not been passing NULL values around, so this conditional never
failed.

Note that NULL values only make sense for the STRING type, so make sure
we check for non-strings in the appropriate length check.
Add an API for create_group