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.
The semantics are different:  `Key`'s writable properties are all simple scalars, except `metadata`, which is not relevant to the back-end.  `Bucket`'s writable properties tend to be compounds, where the server actually cares about the structure.  So, `Bucket`'s mutators need to do impedance matching between "normal" Pythonic APIs and JSONic representations.