Added aggregate tests
Renamed the *Base interfaces, Base is not really needed and it is just confusing

Note about aggregates, the aggregate Id and BucketId will now be pulled from the IEventStream object on the root.  I did this because I don't want to have the user set the id twice.
Basically my reasoning is this, in order to create a new root the user must do

_uow.For<Item>().New('id').Apply<CreatedEvent>( [CreatedEvent] );

Typically, the CreatedEvent contains the Id of the new item, and typically the user would Handle( CreatedEvent @event ) and set the root id in this method.  This is the pattern from NES
HOWEVER, the user has already told us what the id is via .New('id')
So why make them set it again?  Also, since the stream already exists, even if they do set it it does nothing. sooo yeah

For the record, this New syntax is what is being forced on us because .NET can't resolve type parameters well enough.  If I did .New('id', [ CreatedEvent ]) then the user would actually have to type .New<String, CreatedEvent>( 'id', [ CreatedEvent ]) which imo makes the code look too confusing.
The other option would be to remote IEventStream from the Aggregate and use a List of uncommitted events like everyone else.  This would simplify things to .New<String>() but I am not sure its wise to trust the user to set the root's id and bucket.  I feel like those sorts of things should be kept
semi underwraps.  For instance the user might forget to set it, or he might try to change it.  Basically, once the stream is open the Id and BucketId are set in stone.  And the .New('id').Apply() pattern enforces that.

I may look into the alternative in an alternative branch at some point