Class traits

@JasonL9000 Look good to you. I decided to drop REFERENCE_TYPE because moving it may be non-trivial  / people are better served by explicitly using the simple variants below (DEFAULT_MOVE, NO_COPY, etc.) rather than a generic macro because the behavior varies so greatly on a case by case bases.