Use defaultdict from standard library (available since Python 2.5)
Rename hdf5extension.File's constructor to __init__
Make _v_file a weakref to break a circular reference.

This fix breaks the loop that prevented the objects from being
garbage-collected.

I think the overall design of weak and strong references between
objects needs to be rethought. From what I read online, mixing __del__
and weakref is a no-no, and should be avoided.