Migrations: Add some "kommands"

This is part of #342. It adds the following commands.
* k ef migration add [name] -context <context>
* k ef migration apply [migration] -context <context>
Added Type ContextType { get; } property to IMigrationMetadata and used throughout the code.
Removed the piece that adds .Shadow(false) to properties when generating the snapshot model code.
Added some missing Check.Null calls.
Added code to handle nested context classes.
Added ContextTypeAttribute, used to associate a migration class with a context. The Migration implementation of IMigrationMetadata.ContextType returns the value of ContextTypeAttribute.ContextType or null if no attribute.
Changing the redis package to lowercase and adding a maxheap argument.
Revert case change to Redis-64 dependency
Added code to set READ_COMMITTED_SNAPSHOT to ON for newly created databases.
Updated code in Migrator to update database using transactions.
Implemented the same mechanism as EF6 for suppressing transactions.
Updating release NuGet.config
Merge branch 'release' into dev
Updating dev NuGet.config
Learning to read... (Allow properties to be marked as read-only)

This is some more precursor work to the value generation changes. It allows properties to be marked as read-only in metadata, meaning that an exception is thrown if a change to one of these properties is detected and that marking the entity as modified does not mark these properties as modified. Key properties are forced to be read-only.
Fix for GitHub issue 632:
We now have a ModelBuilder and a BasicModelBuilder. The ModelBuilder has conventions which update the model but the model code generator uses BasicModelBuilder and does not generate anything for ValueGenerationOnSave and ValueGenerationOnAdd. When the snapshot is created these will have default values instead of the correct values. The fix generates code for the property value generation settings.
Use ContextTypeAttribute during migration discovery
Merge branch 'release' into dev
I really hope all this negativity is short lived... (Update value generators to be able to mark generated values as temporary)

This change allows value generators to mark generated values as temporary, which in turn will allow the update pipeline to make a decision as to whether a store-generated value is expected.
Removed the ContextType property from IMigrationMetadata. The association between a Migration class and a context type relies solely on the ContexTypeAttribute. Also passed the context type as parameter to methods that generate migration code and use it.
All I want for Christmas is an Exception (removing wrapping on DataStore exceptions)
Moving to structured logging to capture context information when an exception occurs during query/save
Also updating migration information to match current command format
Line Break == Build Break
Adjusting line break in generated code to avoid potentially offensive string fragment
WIP1
WIP
WIP