some support generic map/ collection types

- if there is an error as a result of an abstract Map or Collection
type being declared for a codable field, then the error message is
a lot more helpful
- such fields are allowed if there is an existing, mutable
implementation on the object shell (such as when the field is
initialized to a 'new HashMap<>()' etc)
clear re-used maps/ collections just in case

really only intended to be used with initializers but this is
defensive enough