ENH group attribute access for HDFStore

Summary:
- `store.update_attrs(key, **attrs)` to add/update attributes of a group
- `store.return_attrs(key, attrs, default)` returns namedtuple with values from a groups attributes or single attribute directly
- `to_hdf`, `put` and `append` have optional `attrs=dict(...)` argument to update attributes when storing an object
- `read_hdf`, `get`, `select`, `select_as_coordiantes` and `select_column` have optional `attrs=list or string` and `default_attr` argument, when given returns namedtuple along the original object 

Examples:
```
df.to_hdf('h5', 'df', attrs=dict(a=1, b=2))
df, (a,b) = read_hdf('h5', 'df', attrs=['a', 'b'])
```
```
st.put('df', df)
st.update_attrs('df', a=1, b=2)
a,b = st.return_attrs('df', 'a b')
a = st.return_attrs('df', 'a')
b, = st.return_attrs('df', ['b'])
df, (a,b) = st.get('df', attrs='a, b, c', default_attr=None)
```
```
st.append_to_mutple({'grp/a': ['A1', 'A2'], 'grp/b': ['B1', 'B2']}, 'grp/a')
st.update_attrs('grp', a=1, b=2)
attrs = st.return_attrs('group', ['a', 'b'])
```
it seems that get_attrs is basically get so on non-existence of an attribute just return default - I think that's fine