Fix #313:  Add Key properties

Builds on #347, and presumes it is already merged:  only 0e6c5bd, 89e31be, and a7b997b are unique to this branch.

Notes:

- Some `Key` properties (e.g., `etag`, `owner`) have the same name and one-liner implementation as those in `Bucket`:  this PR keeps them separate because their docstrings differ (they contain URLs pointing to the relevant API spec documents).
- `metadata` is restored (for `Key` only) as the spec uses it:  a mapping of arbitrary, application specific data.

See #313.
All these getter / setters are identical. Seems we should use a method which spits out `property`s:

```python
def _make_prop(metadata_key):
    ...
    return property(fget=getter, fset=setter)
```
and then just create them on the class:
```python
class Key(...):
    content_language = _make_prop('contentLanguage')
    ...
```