First commit for generic Factory

example usage:

 * Object with no post-initialize Constructor:
// note this is equivalent as calling "var someFoo = new Foo();"
var someFoo = Factory.Create<Foo>() as Foo;

 * With post-initialize Construction:
// define some Constructor
private object ConstructDefaultFoo(object obj)
{
    var foo = obj as Foo;
    foo.SystemDependency = SceneObjects.ResolveSingleton<System>(); // Resolve dependency through SceneObjects or some other means.
    foo.SomeMethod(); // call some method on foo if you want now
    return foo;
}
// optionally set default constructor for all Foo:
Factory.SetConstructor<Foo>(ConstructDefaultFoo);
// Construct foo
var someFoo = Factory.Create<Foo>() as Foo;
// Construct foo using some other constructor besides default (assume ConstuctDifferentFoo defined)
var someFoo = Factory.Create<Foo>(ConstructDifferentFoo) as Foo;
// Optionally add new singleton object directly into a SceneObjectsData:
var someFoo = Factory.Create<Foo>(SceneObjects) as Foo;
// or with a non-default constructor:
var someFoo = Factory.Create<Foo>(ConstructDifferentFoo, SceneObjects) as Foo;
// or as a transient:
var someFoo = Factory.Create<Foo>(SceneObjects, "someFoo") as Foo;
// or as a transient using a non default constructor:
var someFoo = Factory.Create<Foo>(ConstructDifferentFoo, SceneObjects, "someFoo") as Foo;
allow null constructors