Adding support for service factories in IServiceDescriptor

Fixes #64
I see what your saying. I wish there was a way to enforce the correctness of this at compile time. Where are unions/algebraic data types when you need them! I guess what we have is OK. The changes you made to the ServiceDescriptor class should be enough.