Avoid using reify when making "field" lenses

hasClassAndInstance was using "reify" to determine the
type of a record field. This doens't work when used in
combination with declareFields because the record declaration
is "virtual". Instead we pass in the types as specified
for each field in the declaration directly.

Fixes #399