Spent the day integrating Aggregate.NET with my DDD example project DDD.Enterprise.Example, this project will be the goto sample in the future

Testing the project against a real working solution resulted in quite a few internal changes to Aggregate.NET

- Changed IEventRouter to be an interface that is declared on the Aggregate, not provided in the constructor
- Added new interfaces like INeedStream, INeedBuilder which will serve as tokens to tell Repository to add objects to the aggregate after .New
    The reason for this change is that constructor injecting was just not working at all.  No matter what fancy tricks I tried I couldn't get it to a point where the user didn't have to create a constructor in his aggregate.  So these interfaces are read by repository and it seamlessly sets properties on the EventSource after creating it via Get or New
    These properties are of course private to Aggregate
- Got rid of the .New('id').Apply<Event> syntax in favor of simply .New('id').  After using the library in a real project I realized that the Apply call would have been required to do in the message handler, bleh no way.
    A consequence is we can no longer Apply<> events from the aggregate constructor, which is what NES and some others do.  Instead I am having a .Create event on the aggregate.  Which kind of makes sense, maybe the aggregate doesn't have a create event, there is no rule that a root needs an initial event other than the id
- Added a structuremap repository definition to the library to wireup library defaults automatically.  If you use other IOC containers you will need to wire your own objects via NServiceBus

- Perhaps the biggest internal change happened in Repository.  The change from non-constructor injected aggregate root hit me hard.  I definitely need to inject things into a new root, but I absolutely will not put the burden of passing constructor arguments on the user in his definitions.  Therefore as mentioned above I added several new marker interfaces which indicate if a new event source needs something from the ioc container.
    In Repository.Get and Repository.New I am creating a new aggregate root from its PRIVATE constructor.  I explicitly am making the user declare his roots private because there will be no reason to ever new an aggregate himself.  All newing HAS to be through the repository.  This is because the repository is not only creating the object, it is also injecting the root with the EventStream which keeps track of the aggregate version, committed events, uncomiitted events, and more.
    Instead of keeping a generic list of objects in the root and Flushing them when we commit, our roots keep the dirty stream around until .Commit it called from the unit of work and all changes are committed via NEventStore.  Having a copy of the actual stream in the root will minimize the possibility of collisions between multiple same roots and should help me develop conflict resolution once I want to start that.