Add key generators for common key types and add checks ensuring tempt keys are replaced on SaveChanges

See Issue #1271. This change adds the infrastructure for any key property to have a value generator and adds an exception for when a temporary key value is still set when the state of the object is changed to Unchanged, Modified, or Deleted. This will happen if SaveChanges is given temp values and doesn't generate real values.

This change does not include a convention to make any key property have GenerateValueOnAdd, although the convention that detects keys now sets it for any key detected.
Add higher-level AttachGraph methods

Currently two methods, with async overloads:
- AttachGraph: Adds each entity if its key value is not set, otherwise attaches the entity as Unchanged.
- UpdateGraph: Adds each entity if its key value is not set, otherwise attaches the entity as Modified.

We can discuss if both behaviors are needed, and if so whether it should be a single method with a flag.

These methods make use of an implementation of IEntityAttacher and there is a factory to get the IEntityAttacher to use for attach/update. This means that the defaults can be changed by registering a different factory in DI.

The default key checking is exposed as a IsKeySet property on EntityEntry, so it is easy to use this functionaliy either in the AttachGraph delegate or in implementations of IEntityAttacher.
Commands: Remove-Migration
Added setter to PropertyEntry.CurrentValue
Adding moving CLR flavor from test name to metric name and refactoring internal variables on DbContextPerfTests
Reacting to System.Threading.ExecutionContext being removed
fix to issue 1293 - Include :: data corruption when doing query with include on One-to-One navigation property
For One to One PK-PK relationship we were creating INNER JOINs, which could result in entities not being returned for Include query if their referenced entity was null. Fix is to produce LEFT JOIN instead for One to One Include queries. CR: Andriy
Fix to issue 1220 - Queries with join and count (or other result operators) were broken.

Problem was in the result operator translation, where we tried prune CreateValueReader and CreateEntity calls - replace it with the reader that we get from the database query. We should remove the first (outermost) occurrence of CreateValueReader/CreateEntity, but instead we were removing the innermost one. Reason for that is that we were matching it based on source scope that was passed to the visitor and we were passing the incorrect one. Fix is to pass the correct query scope (i.e. one that would match the outermost CreateValueReader/CreateEntity node. CR: Diego
Read relevant IConfiguration options in DbContextOptions and remove direct coupling with IConfiguration.