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.
Because it was using the dataset's schema rather than the TestBean's schema. We have to choose between the two, and I think we should go with the one that matches the in-memory representation.

There may be some tricks to reconcile the reflected schema and the dataset schema, but we won't generally have that ability. We have different schemas in this test case because we explicitly set the schema on the descriptor to one we've created by hand. I think the more common case would be to set the descriptor's schema from the object class, in which case we'd see this error and wouldn't have the second schema with the default at all.