Coerce or handle mismatching types appropriately on the write side

- Nil is ignored/passed through
- Booleans: value is passed through
- Structs: provided value should be an instance of the specific struct
- Strings: can be coerced via #to_s
- Enums: can be coerced via #to_sym
- Numerics: can be coerced via #to_i or #to_f
- Map/List/Set can be coerced via #to_hash or #to_a

If none of the above rules can be applied, a TypeError is raised.