The fact that this even worked at all was driving me nuts until I realized how `VOSCatalog` tries to act as a proxy for its internal `self._tree` dict.  Is there a reason it doesn't just subclass `dict` or something?

In any case the reason this doesn't work is that `VOSCatalog` doesn't implement `__iter__`, and if it's going to act as a proxy for a `dict` it should.  It could be as simple as:

```
class VOSCatalog(object):
    ...

    def __iter__(self):
        return iter(self._tree)

    ...
```