Make Subscribers enumerable and use UTF8StringPointer for fields

Making it enumerable should work around the issue of the confusion between
variable length arrays in structs, i.e. size 0, and actual size 0 arrays.
Subscribers abstract away the nastiness of it, handles NULL pointer, and
will allow you to iterate over the interesting parts of the Subscribers.