Simplify `requireProperties` logic, document the conventions
Simplify `publishAttributes`, use `undefined` instead of `nob` to register a property with no default value
Remove bogus `Platform.flush()` calls
No-default properties are now expressed as `undefined` on `publish`, not as empty objects
add deserialization support for undefined valued properties.