Splitting the low-level ValueGeneration enum; Issue #704

From issue:

ValueGeneration.OnAdd means generate a value for the property in the state manager when the entity is put into the Added state. It doesn't have a direct impact on the update pipeline.

ValueGeneration.OnAddAndUpdate doesn't have any meaning in the state manager and doesn't make use of value generators at all. It tells the update pipeline that the value is computed on the store and so should always be obtained from the store for both inserts and updates.

These things are therefore orthogonal and don't really belong in the same enum. It might be cleaner to just have two bool flags on the API surface. For example, GenerateValueOnAdd and IsStoreComputed.
Prevent context from being used in OnModelCreating and OnConfiguring (Issue #565)

Also Issue #943: Make DbContext.OnModelCreating publicly accessible

Just added a public static method for calling it. This is not easily discoverable and so should not cause much confusion but allows ModelSource to be implemented without access to internals.