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)
why not ImplicitBijection here? That is how we usually do this to deal with the Equivalence between `Bijection[A, B]` and `Bijection[B, A]`.