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.
I considered a similar factoring.  They all look identical now, but I wasn't sure whether we might need to add extra logic (e.g., validate MIMEtypes, URLs, valid ranges for integers, etc.)