Fixed all clang -Wsigned-enum-bitfield warnings (#2882)
Made enums involved in bitfields unsigned by specifying their underlying type as unsigned char.
Due to a bug, when specifying an underlying type, gcc < 9.3 warns about bitfields not being big enough to hold the enum, even though they are. So keep the plain enum for old gcc.
An example of the bug is here:
https://godbolt.org/z/58aEv8zEq (cherry picked from commit f63afd16)