Remove *_tag_t: use enum bitfield extension or unsigned in structs

Using something like enum_type XXX : 8; is more elegant than defining a
combination of enum xxx_tag_t and typedef unsigned char xxx_t; as the
compiler knows the more specific enum type then. We use a macro so on
platforms without enum bitfield extension a simple unsigned is used.