Making property field and method accessors us the type of the passed object rather than the generic T type when attempting reflection.
This is because if, for example, a Person instance (which has a 'FirstName' property) is cast as 'object' and then reflection takes place
against the T type (object), the requested property 'FirstName' will not exist on the type.  If GetType is called on the instance, however, the
type returned will be the specific type 'Person' and the property
resolution will occur successfully.