Pull in / reconcile all PRs for #314

Incorporates / supersedes:
- #340
- #341
- #342
- #343 (fixes up)
- #344
- #345
- #346

Implements #314.
I strongly prefer leaving names as-is.

1. Trading string for string doesn't benefit us in a code sense.
1. Leaving as-is, we can just point to the discovery doc and the existing API docs.