expect fields instead of constructor params

Input record classes should declare their public fields, not their
constructor parameters. The point is in the values they expose, not in
how you construct them. Also the code looks much cleaner this way.
make sure fields are readonly
make sure classes are sealed
generate constructors from fields, not vice-versa
save assemblies once, not once per modified class
seal classes