Making generics parameters at the factory level

Fixes #45 

Before, generic type parameters were at the method level.  This allowed
a single factory to create objects with any type parameters.  This also,
however, required every factory to be able to create objects with any
type parameters.  Certain use cases will need the ability to limit the
type of objects returned so the parameters need to be at the factory
level instead.