use macros to clean code up a bit; only as if necessary in SafeListOf

could probably generate all of the operator boilerplate with a macro
remove debug