Refactor Injector internally

Logic was getting messy with too many if-then and method caching? which
had to be mentally turned around to singleton? (logic now reversed).
Add support for first_found producer.

This commit adds:
- factory method that accepts an array of [type, name], [name] or name.
- implementation of producer
- a test