fix #8807, regression in constructors when evaluating field types

this changes `fieldtype` to accept a type as the first argument, instead
of an instance. this allows us to use it to `convert` the arguments to
`new` to the field types, instead of evaluating the field type
expressions. this is more general (e.g. in case the mapping from
field type expressions to final field types becomes more complex).
also makes `fieldtype` more similar to `fieldoffsets`.