Simple PropertyAccessor that uses reflection to access properties for reading and writing.
A property can be accessed if it is accessible as a field on the object or through a
getter (if being read) or a setter (if being written).

createOptimalAccessor

Attempt to create an optimized property accessor tailored for a property of a particular name on
a particular class. The general ReflectivePropertyAccessor will always work but is not optimal
due to the need to lookup which reflective member (method/field) to use each time read() is called.
This method will just return the ReflectivePropertyAccessor instance if it is unable to build
something more optimal.