Pull in / reconcile all PRs for #314

Incorporates / supersedes:
- #340
- #341
- #342
- #343 (fixes up)
- #344
- #345
- #346

Implements #314.
s/metadata/properties

Might be worth using the Sphinx pylint plugin waiting to land:
http://www.bytebucket.org/logilab/pylint/pull-request/143/new-extensions-directory-new-optional/diff