Added support for enums, and added various new guards

I've added the following guards:
- enum: is-valid-value
- enum: has-flag
- int: is-positive
- int: is-negative
- long: is-positive
- long: is-negative
- string: is-not-null-of-whitespace
- T: is-one-of