Implement smarter detection of macro impls

Macro implementations may appear in two different places:
 - in macro bundles
 - in a simple method

To detect macro bundles, we check whether the class constructor accepts
an argument that may be used as a `Context`.

To determine whether a method is a macro implementation, we check
whether it accepts an argument that may be used as a `Context`.