Content-negotiation API
Simplify comparisons

- Can do an isset on a nested key without needing to test at each level.
Use a common key for indicating selectors

- Instead of a key named after the current selector name, a "selectors"
  key (will simplify traversing in clients)
CS fixes

- trailing whitespace
Merge branch 'feature/content-negotiation'

content-negotiation API