The current implementation will read the global heap for a vlen string with a fill value twice, once when we instantiate the DatasetID, and once again when we go to the data - that's because there are two different global heap dictionaries, and the one cached by DataObjects is not passed to the variable.
We also have code duplication in the attribute reading and the misc_low_level routine used for data reading.
These issues are a hangover from #29
Neither are problematic at the moment.