I figured out what the actual layout of this property is (instead of
guessing, which created some bad results.) And added tests of course!
Also fixed a bug in read_string_with_length() that didn't handle the
case where the string length is zero.
Finally finished and figured out how maps are handled. It didn't encode
the number of items, it's based on how many bytes you read. I also fixed
arrays so they're also correct, and we'll see if sets break.