- requires MyType to have full-copy (you can assign types with pick using RawPickToValue)
- there are two levels of Value compliance - raw types just get stored and retrieved, while "rich" value types support other operations - test for Null, equality comparison (including casts to similar types like Date<->Time, int<->double), serialization and casts to similar types.
- you can also make your type more compatible by adding operator Value and constructor from Value