stricter 'required' fields for codec config+json

previously it would check for an existing value and there was one,
then it did not complain. This was bad for two reasons. It did not
work at all for primitive types and it didn't really make any
sense.

If there is an in-code default, then why would you even mark
the field as required at all? The only possible use case involves
another, static, source of configuration that may or may not init
a field during construction. Such cases are better handled in one
of dozens of other ways.

This is a config-breaking change but it is non-silent. That is, it
cannot result in a change in behavior without throwing an error
and additionally, fixes should be both simple and possibly inform
on logic that was not behaving as expected.