HDF5 updates

* [x] Added testing utility function to capture standard output (useful in unit tests that check display output).
* [x] Added `describe()` method that displays the list of groups and datasets in an HDF5 file.
* [x] Refactored open/close logic.
* ~~Raise exceptions if attributes not available.~~ todo in another PR
Yes, this is the `File` class defined here, not h5py's `File` class.