This adds `EnumAND` and `EnumOR` which will return new enums based on the specified operations. These are handy for enums that correspond to bit fields, such as those used for object persistent sounds.
This maintains the type information which can be used for enforce
const-correctness and also for implementing more advanced ways of
handling the type information.