Refactor group and node manipulation from H5File down into H5Group

This PR allows H5Groups to create and remove subgroups directly without requiring the user to manually dig out `_h5_file`.

It also extends the behavior of most functions creating new groups and nodes to also return those nodes.
What's the point of duplicating the `dtype`, `chunked`, and `extendable` keyword args? Shouldn't those be covered by `**kwargs`? You're using the same values as `H5File.create_array`.