CDK-518: Add EntityAccessor to read entity fields.

Before this commit, there were serveral places that read record data.
Older code used PropertyDescriptor to get accessor methods and newer
code used ReflectData#getField and didn't use DataModelUtil. This adds
an EntityAccessor class that resolves an entity type against a Schema,
determines the correct GenericData model for reading, and accesses
record data. This is also a good place to expose the resolved entity
class, as well as the actual entity schema based on that class.

The EntityAccessor instance is Immutable and can be shared. It also has
support for reading nested fields that will be required by CDK-435.
Nested field names are separated by '.', for example, location.latitude.
Where possible, EntityAccessor should be shared because it caches the
sequence of fields to access nested data.