Ianoc/refactor macros

Moves the macro's into one target, don't think we need a common separate target yet.

Attempt to remove duplicated code. Rename test classes to be more obvious what they are (too much use of A, B , both types for a func and concrete classes)
i guess most of the ones i'd seen were around pattering mattering against the expression we've gotten. We could also evaluate it. I'm not really sure which is preferable. Here i guess its a toss up?