Fix enumerated types

The source code contains many references of the `Enum` raw type. Using an `Enum` reference merely says that you're referring to an enumerated value. Because Enum is a raw type, it causes compiler warnings (or requires suppression) and creates a possibility of using an incorrect enumerated value, because the compiler cannot determine if an assignment is safe. We could eliminate the compiler warnings by using `Enum<?>` instead of `Enum`, but it won't prevent the possible "enum mismatch".

This pull request proposes a change that would introduce several marker interfaces - `MonkeyType`, `EventType`, `GroupType` and `ResourceType`. Enumerated types in Java can implement interfaces and therefore we can mark each existing enum with one of the marker interfaces to indicate their intended use. This makes enumeration safer to use while still maintaining the flexibility of using different enumerations in different contexts.