Moves common macro functionality in MacroTrait.

Also adds test for MacroTrait.
Could add macro trait on the Arr class when implemented (#3537).

~~I didn't remove Str macro tests and I added Response macro test, because method overrides can break macro functionality.~~

~~What do you usually do in these cases?~~
~~Make a shared test that can act on different objects?~~
~~Move individual trait implementation to the trait test?~~
~~Don't care about these cases?~~

Update:
After discussions with @KirkBushell (Oddman) I dropped the macro tests in the classes implementing MacroTrait.
I agree that it's not my concern if someone breaks by overriding.

Second update:
Feel like removing the StrTest for macro was a bad idea, just because it was already there.
If someone feels like it should be back, I'm happy to do it.