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 we put `Try[$T]` as the return type? I saw scala infer `Try[T] with Product with Serializable` here in my fastTry macro.