Refactored the object hierarchy, and added some methods that apply to all API types.

After some messing around I eventually decided on using the word Identifier as the most generic HDF5 type. (This is the word used in the C API docs)

The vast majority of the H5I functions have no corresponding go-hdf5 implementation yet, but I expect some of those functions will probably be useful in the future.

Most H5 objects are Locations, (i.e. anything that can be retrieved by /foo/bar/baz style queries) but some are not, notably Attribute and Dataspace. (I have an implementation for Attribute too which will come later in a separate PR once I've finished testing it.)

The addition of the CommonFG type gives the benefit of having a single implementation for many methods common to both File and Group at the expense of having another type in the system. I'd like to give CommonFG a better name but haven't really come up with anything better yet. I'm not convinced that Container is a good name, since it's generic, and everything in HDF5 generally contains other things.