retain ReadOnlyDictionary reference instead of recreating instance on each property get

ReadOnlyDictionary is only a wrapper around an existing dictionary so
you can retain the reference instead of recreating new instances on each
call.

This change avoids a (minor) performance bottleneck if a user queries
the properties in a loop and is not aware of the inner implementation.