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.
Here's a function decorator which does what I'm proposing:
```
def _update_wrapped(wrapped, original=None):
    PREAMBLE = """\
** H5Group wrapper for H5File.{func_name}: **
Note that the first argument is a nodepath relative to the group, rather than
an absolute path. Below is the original docstring:

    """.format(func_name=wrapped.__name__)
    wrapped.__doc__ = PREAMBLE + original.__doc__
    return wrapped

def h5_group_wrapper(original):
    return partial(_update_wrapped, original=original)
```

In use, it would look something like this:
```
    @h5_group_wrapper(H5File.some_file_method)
    def some_file_method(...):
        ....
```