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.