Changes ISpriteSource.Frames to be of type IReadOnlyList<ISpriteFrame>.

- Updated implementations to return a ReadOnlyList around an array (to reduce wasted memory from exposing lists or lazy enumerators around lists).
- Protect non-public ISpriteFrame classes by making them inner classes to prevent casting.
- Added an AsReadOnly extension method for lists.
Merge pull request #5766 from RoosterDragon/read-only-frames

Make sprite frames read-only lists.