Hdf5 metadata change

Fixes #463

Additionally:
- `observation_metadata` and `sample_metadata` are now private, and the function `metadata` has been updated so if `id is None` it will return the metadata along that axis.
- `group_metadata` has been added, with and `axis` parameter
- Some code clean-up, removing unused variables/imports and code duplication

@wasade it would be great if you can review.

`sample_ids` and `observation_ids` should became private and create a function `ids` that accept an `axis` parameter, for consistency with other methods. I was thinking on including that change here to, but it would be a lot of changes in a single PR. I can work on another PR once this is merged (to avoid merge conflict hell...)
are the primitives (e.g., int) parsed correctly? Or is that implicit in the dtype of the dataset?