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 did wonder whether we needed to factor the setters to allow a group of changes to be batched up and sent as a single `PATCH` request.  I put it off because apps that know they want multi-writes can still use `_patch_properties` directly (we would need to expose it as an API if we decided that way).