Critical fix to Optional Model Values

Turns out that we weren't serializing Optional Model Values properly,
because the internal powertrain was always coercing them to ExactlyOne.
Fixed that, and put in a noisy error that checks during serialization.