Modify AssociatedMetadataProvider to use PropertyHelper to create accessor

Additionally change it to use TypeExtensions.GetReadableProperties to get
property list. This causes it to ignore indexers which should not be
considered.

Fixes #595
will `PropertyHelper.GetProperties()` ever duplicate a property?  for example, will it return duplicates with `virtual` or `new` properties in play?  the `ContainsKey()` check might not be needed anymore.