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)
Can you add the comment about us using abort in the macro to stop the implicit search. That will be tricky if you just look at the types.

Can we remove the map one since it does not make sense?