HDFStore.walk() to iterate on groups
This PR adds a walk() method to HDFStore in order to iterate on groups.

This is a revival of the initial PR #10932, rebased on upstream/master and updated tests.

- [x] closes #10143 
- [x] tests added / passed: test_pytables.py:testwalk()
- [x] passes `git diff upstream/master -u -- "*.py" | flake8 --diff`
- [x] whatsnew entry

# [Codecov](https://codecov.io/gh/pandas-dev/pandas/pull/21339?src=pr&el=h1) Report
> Merging [#21339](https://codecov.io/gh/pandas-dev/pandas/pull/21339?src=pr&el=desc) into [master](https://codecov.io/gh/pandas-dev/pandas/commit/36422a88474396148bd7d5d38aa238ea844d9555?src=pr&el=desc) will **increase** coverage by `<.01%`.
> The diff coverage is `100%`.

[![Impacted file tree graph](https://codecov.io/gh/pandas-dev/pandas/pull/21339/graphs/tree.svg?token=eZ4WkYLtcO&width=650&src=pr&height=150)](https://codecov.io/gh/pandas-dev/pandas/pull/21339?src=pr&el=tree)

```diff
@@            Coverage Diff             @@
##           master   #21339      +/-   ##
==========================================
+ Coverage    91.9%    91.9%   +<.01%     
==========================================
  Files         154      154              
  Lines       49562    49577      +15     
==========================================
+ Hits        45549    45564      +15     
  Misses       4013     4013
```

| Flag | Coverage Δ | |
|---|---|---|
| #multiple | `90.27% <6.66%> (-0.03%)` | :arrow_down: |
| #single | `41.87% <100%> (+0.01%)` | :arrow_up: |

| [Impacted Files](https://codecov.io/gh/pandas-dev/pandas/pull/21339?src=pr&el=tree) | Coverage Δ | |
|---|---|---|
| [pandas/io/pytables.py](https://codecov.io/gh/pandas-dev/pandas/pull/21339/diff?src=pr&el=tree#diff-cGFuZGFzL2lvL3B5dGFibGVzLnB5) | `92.48% <100%> (+0.04%)` | :arrow_up: |

------

[Continue to review full report at Codecov](https://codecov.io/gh/pandas-dev/pandas/pull/21339?src=pr&el=continue).
> **Legend** - [Click here to learn more](https://docs.codecov.io/docs/codecov-delta)
> `Δ = absolute <relative> (impact)`, `ø = not affected`, `? = missing data`
> Powered by [Codecov](https://codecov.io/gh/pandas-dev/pandas/pull/21339?src=pr&el=footer). Last update [36422a8...9e7d7a0](https://codecov.io/gh/pandas-dev/pandas/pull/21339?src=pr&el=lastupdated). Read the [comment docs](https://docs.codecov.io/docs/pull-request-comments).
 I think I addressed your review's comments > minor comment. can you elaborate on why you think the return values are the right thing here? e.g. is this from the PyTables api directly? e.g. what is the point of having the groups and subkeys? wouldn't you just care about the subkeys?

It was made this way in the original PR, I didn't see any reason to change it. It's a refinement from the PyTables api, I guess the original author  @stephenpascoe  found it convenient. 

I made the docs change in the last forced push. merged via https://github.com/pandas-dev/pandas/commit/45e55af9cf74aede00a8b10f8922537f285a573a

for some reason couldn't push to your remote, so manually merged.

thanks!