DEV: Validate models returned from ContentsManager methods.

Adds a validation layer to models returned by `ContentsManager` instances.

ping @minrk 
I'm aware that comma-separated lists ignore the trailing comma.  I've converted to using this style (which I agree is less visually pleasant) after being bit multiple times by bugs where I've written a list like:
```
['foo',
 'bar' # Comma is missing here.
 'buzz',
 'bazz',
]
```
Since python implicitly concatenates multi-line strings, this evaluates to `['foo', 'barbuzz', 'bazz']`.

In my experience, the syntax used here makes it harder to make that mistake while still preserving copy-pasteability of the final lines.

All that said I'm happy to defer to your guys' preferred style.  Just wanted to make it clear that this is an intentional choice made for code-maintenance reasons.