engine: Generify & IoC provider proxy factory

To support multiple provider & provider proxy types, this factory should
be generic and return the correct type.

Also turned the factory into a singleton which returns an instance that
can be used for DI, so that interacting classes don't have to rely on a
static relationship with the factory class.

Change-Id: I79d80c28921e417e9cfbb35bb621bbdb751c667a
Signed-off-by: Mike Kolesnik <mkolesni@redhat.com>