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
Using a single way to access properties is goodness. Compiling lambdas to access properties is not goodness. The value is not just in performance (though we did prove out performance previously, and here we just allocate less memory), it's in the fact that we have a single method used across the framework to do so.