New categories

@ndonald2 Yeah, this is intended to merge.
The other problem with macros is that they don't allow the compiler to do any type checking. These are fairly simple to understand, but if someone didn't know to pass primitives, they would get a compiler error that doesn't really provide any useful information or way to expand the macro to see what went wrong.