Separate responsibilities within CommandContextManager. Introduce Factory.

CommandContextFactory is responsible for creating CommandContexts.
CommanContextManager is responsible for managing lifecycle.
Rename IUnitOfWork to ITransaction - the interface only defines Commmit
and Rollback and a UnitOfWork has more responsibility than this.

ICommandContext is our UnitOfWork.  We are keeping the interface (as
ITransaction) because AggregateRoot and EventSource both depend on it.