Use NS_ENUM rather than enum

NS_ENUM is now the preferred way to enumerate types – it hints LLDB and the compiler, so that (for example) switch statements can be checked for coverage, printed enumerated types can use names rather than integers, etc.

Remove the defines at the top once you're ready to require iOS SDK 6