Read only interfaces

Support IReadOnlyList and IReadOnlyDictionary.

Only last 2 commits are actual changes, the others seem to be some artifact of my continual merging dilemma...