Pull in / reconcile all PRs for #314

Incorporates / supersedes:
- #340
- #341
- #342
- #343 (fixes up)
- #344
- #345
- #346

Implements #314.
Seems dangerous to be stringly-typed.

It's fine for this PR. For a future change, how do you feel about a decorator

```python
    @accessor('acl')
    def get_acl(self):
        ...
```

that will populate this dictionary for us?