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)
this is weird. We can't ever use these right? Should we mark them not implicit?

I think we should just not stack them. Have something like:

```scala
object MacroImplicits {
  object Recursive {

  }
  object NonRecursive {
  
  }
}
```
then you `import MacroImplicits.Recursive._` or something.

The current stacking is confusing.