will estes

Results 4 issues of will estes

Can't compile gcc correctly since its not following C99 properly. ``` ../../gcc/toplev.c:545:1: error: redefinition of a 'extern inline' function 'floor_log2' is not supported in C99 mode floor_log2 (unsigned HOST_WIDE_INT x)...

This derives `Hash` and `Eq` for `UserMode` and `ChannelMode`. This allows them to be used as elements in a `HashSet`, which is quite helpful for efficient flag operations.