Moar validations
The first 5 commits are refactoring. There is no change to the generated code.
The following 4 commits distinguish arrays and strings. For strings, they add vn_decode_char_array
to make sure strings are null-terminated. For arrays, they make vn_decode_array_size
validate strictly.