Improve detailed error message description

Inspired by #345.  Currently we use the top-level error description, and major & minor error code descriptions for HDF5 exception messages via ``"description (major: minor)"``.  This patch changes the second half to use the bottom-most description on the HDF5 error stack, which is generally more informative.

Examples:

```
ValueError: Unable to set extend dataset (Dimension cannot exceed the existing maximal size (new: 100 max: 1))

IOError: Unable to open file (Unable to open file: name = 'x3', errno = 2, error message = 'no such file or directory', flags = 0, o_flags = 0)

KeyError: "Unable to open object (Object 'foo' doesn't exist)"
```