value maps/ arrays recursively unwrap as natives

their types are now eg. ValueObject<Map<String, E>> instead of
ValueObject<Map<String, ValueObject<E>>>. I considered doing that
originally, but I didn't want to have to write the code for it. It
turns out to be pretty required for the to string method anyway
though (unless I clone in that method and alter it there, but that
is just enough work anyway to not be worth it).