#10: Provide annotation/macro to inject dependencies

- Working macro implementation
- Move all internal types to a separate package
- Code clean up
Add explanatory comment