test_msgPayloadProtect

Message payloads must reject assignment of field names that do not already exist, the same way SWIG-wrapped modules do (issue #305). This guards against silent typos such as payload.sigm_BN = ... instead of payload.sigma_BN.

Only the *Payload data structs are frozen; the Msg/Reader/Recorder/Writer and vector wrapper classes must stay unfrozen (their custom __getattr__ has side effects), so this file also checks that a recorder can still be built.