caos: Unify and formalize class metadata handling
caos: Unify and formalize class metadata handling

Currently class metadata in Caos-generated classes is stored in a
loosely defined ClassMetadata object which works as a dumb container.
Improve the situation by formally defining class metadata classes as
Structs and assign a specialized metadata class to each object type
class.

Additionally, class factory now accepts metadata attributes directly and
creates metadata instance automatically.

edgedb/edgedb,edgedb/edgedb,edgedb/edgedb